我在我的数据库中有一个表,我想用getter和setter创建一个模型类。对于我的项目中的大部分任务,我正在使用PetaPoco。我手动创建模型,但很少有表格有很多列。如何使用PetaPoco库自动创建数据库模型?
有什么方法可以使用PetaPoco从数据库创建模型?
我在我的数据库中有一个表,我想用getter和setter创建一个模型类。对于我的项目中的大部分任务,我正在使用PetaPoco。我手动创建模型,但很少有表格有很多列。如何使用PetaPoco库自动创建数据库模型?
有什么方法可以使用PetaPoco从数据库创建模型?
PetaPoco有T4 Visual Studio模板应该为你做这个。如果您不想让它们全部生成,只需使用该模板,然后从所需的* .cs文件中复制这些类。
您会在PetaPoco's GitHub code repo上找到模板。
模板添加到您的项目可以通过两种方式来完成:
我会推荐第二个选项,因为您可以在构建之前将它们设置为自动下载时(CVS的一部分)。
我使用了为我生成DAL的Database.tt。从该列表中选择哪一个用于创建表格类? – RKh 2012-04-17 07:22:59
@RPK:你从那个list_中得到什么意思?什么名单?默认情况下,它应该生成数据库类和模式类。据我所知。我自己编写手动POCO,但通过快速浏览模板,应该生成表类并将其包含在生成的'Database.cs'文件中。 – 2012-04-17 07:45:53
在列表中,我的意思是你给我的链接中显示的.tt。我也手动编写POCO,但我想用T4添加一个。哪个T4模板可以运行?它会干扰现有的POCO吗? – RKh 2012-04-17 08:33:48
我强烈建议您使用T4模板,因为它可以使流程更加快速以及添加其他功能。
的最快方法是打开“包管理器控制台”(工具>库包管理器>包管理器控制台),请确保您的项目在“默认项目”选择下拉菜单和运行:
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 first from database”函数来生成POCO类,以便与PetaPoco一起使用。只需生成它们并删除所有不必要的EF垃圾桶,如DBContext和属性。通过这种方式,您不仅可以为C#生成POCO,还可以为VB.NET生成POCO及其全部可视化点击,而不会与T4模板混淆。
项目/添加新项目... /数据/ ADO。NET实体数据模型/代码首先来自数据库
来自peta poco的t4模板无法做到这一点? – wiero 2012-04-13 09:58:42