如何自动创建使用PetaPoco库数据库模型?(How to automatically creat

2019-09-16 12:28发布

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

有什么办法来创建使用PetaPoco数据库的模型?

Answer 1:

PetaPoco有T4的Visual Studio模板应该为你做这个。 如果你不想让他们所有生成的,只是使用的模板,然后复制这些类从要生成的* cs文件。

你会发现模板PetaPoco的GitHub的代码回购 。

添加模板到您的项目可以通过两种方式来完成:

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

我会建议第二个选项,因为你可以建立之前设置你的包来自动下载时不存在(你的CVS的一部分)。



Answer 2:

我强烈建议你使用T4模板,因为它会使进程要快得多,也可以添加额外的功能。

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

PM>install-package petapoco

这将创建一个名为“模型”文件夹,名为“生成”子文件夹。 在“生成”文件夹中,打开“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 + '}'

我希望这有帮助。



Answer 3:

在Visual Studio中,可以使用集成的实体框架的“代码首先从数据库”功能来生成POCO类与PetaPoco使用。 刚生成它们,并删除所有不必要的EF垃圾一样的DbContext和属性。 这样一来,就可以生成波苏斯不仅为C#,同时也为VB.NET和其所有的视觉点击,用T4模板无需复杂。

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



文章来源: How to automatically create model from database using PetaPoco library?