如何使用PetaPoco库从数据库自动创建模型?

我在我的数据库中有一个表,我想用getter和setter创建一个模型类。 对于我项目中的大多数任务,我使用的是PetaPoco。 我手动创建了模型,但很少有表有很多列。

有没有办法使用PetaPoco从数据库创建模型?

PetaPoco有T4 Visual Studio模板 ,应该为你做这件事。 如果您不希望将它们全部生成,只需使用该模板,然后从生成的* .cs文件中复制所需的类。

你会在PetaPoco的GitHub代码回购中找到模板。

向项目添加模板可以通过两种方式完成:

  1. 手动复制文件
  2. 在包控制台中使用NuGet或使用Visual Studio包管理器。 NuGet网站的详细信息

我建议使用第二个选项,因为您可以在生成之前将程序包设置为自动下载(不存在时)(CVS的一部分)。

我强烈建议您使用T4模板,因为它会使流程更快,并添加其他function。

最快的方法是打开“软件包管理器控制台”(工具>库软件包管理器>软件包管理器控制台),确保在“默认项目”下拉列表中选择项目并运行:

 PM>install-package petapoco 

这将创建一个名为“Models”的文件夹和一个名为“Generated”的子文件夹。 在“生成”文件夹中,打开“Database.tt”文件并设置信息。 有关设置此信息的信息,请参阅http://www.toptensoftware.com/petapoco/ 。

成功设置T4模板后,它将生成一个名为“Database.cs”的代码文件,其中包含数据库中的所有对象。 产生的是“部分类”。 这里的关键是你不应该修改这个文件中的任何对象。 相反,您将在同一名称空间中创建一个新的分部类然后您可以实现更多逻辑。 移动/更新现有对象以确认新设置。

另一个选择是创建一些TSQL来生成一些代码。 这是我过去用来为我的PetaPoco表生成接口的一个非常粗略的例子。

 declare @script nvarchar(max); declare @table nvarchar(256); set @table = 'YourTableName' set @script = 'public interface I' + @table + '{' + char(10); SELECT @script = @script + CASE WHEN st.Name IN ('int') AND c.is_nullable = 0 THEN 'int' WHEN st.name in ('smallint') AND c.is_nullable = 0 THEN 'short' WHEN st.name IN ('bigint') AND c.is_nullable = 0 THEN 'long' WHEN st.name IN ('varchar','nvarchar','sysname') THEN 'string' WHEN st.Name IN ('datetime') AND c.is_nullable = 0 THEN 'DateTime' WHEN st.Name IN ('bit') AND c.is_nullable = 0 THEN 'bool' WHEN st.Name IN ('decimal') AND c.is_nullable = 0 THEN 'decimal' /* NULLABLE VALUES */ WHEN st.Name IN ('int') AND c.is_nullable = 1 THEN 'int?' WHEN st.name in ('smallint') AND c.is_nullable = 1 THEN 'short?' WHEN st.name IN ('bigint') AND c.is_nullable = 1 THEN 'long?' WHEN st.name IN ('varchar','nvarchar','sysname') AND c.is_nullable = 1 THEN 'string?' WHEN st.Name IN ('datetime') AND c.is_nullable = 1 THEN 'DateTime?' WHEN st.Name IN ('bit') AND c.is_nullable = 1 THEN 'bool?' WHEN st.Name IN ('decimal') AND c.is_nullable = 1 THEN 'decimal?' --WHEN st.name IN('sysname') AND c.is_nullable = 1 THEN 'string?' ELSE 'UNKOWN-' + st.name END + ' ' + c.name + '{get;set;}' + char(10) FROM sys.tables t INNER JOIN sys.columns c ON t.object_id = c.object_id INNER JOIN sys.types st ON st.system_type_id = c.system_type_id WHERE t.name = @table print @script + '}' 

我希望这有帮助。

在Visual Studio中,您可以使用集成的Entity Framework的“Code in first from database”函数生成POCO类,以便与PetaPoco一起使用。 只需生成它们并删除所有不必要的EF垃圾,如DBContext和属性。 这样,您不仅可以为C#生成POCO,还可以为VB.NET及其所有可视化点击生成POCO,而不会弄乱T4模板。

项目/添加新项目… /数据/ ADO.NET实体数据模型/代码首先来自数据库