我的数据库中有一个表,我想为它创建一个带有 getter 和 setter 的模型类。对于我项目中的大多数任务,我使用的是 PetaPoco。我手动创建了模型,但很少有表有很多列。
有没有办法使用 PetaPoco 从数据库创建模型?
我强烈建议您使用 T4 模板,因为它可以加快流程并添加额外的功能。
最快的方法是打开“包管理器控制台”(工具 > 库包管理器 > 包管理器控制台),确保在“默认项目”下拉菜单中选择您的项目并运行:
PM>install-package petapoco
这将创建一个名为“Models”的文件夹和一个名为“Generated”的子文件夹。在“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 + '}'
我希望这有帮助。
PetaPoco 有 T4 Visual Studio 模板,应该可以为您完成这项工作。如果您不想全部生成它们,只需使用模板,然后从生成的 *.cs 文件中复制您想要的这些类。
您可以在PetaPoco 的 GitHub 代码库中找到模板。
可以通过两种方式将模板添加到您的项目中:
我会推荐第二个选项,因为您可以将包设置为在不存在时在构建之前自动下载(CVS 的一部分)。
在 Visual Studio 中,您可以使用集成实体框架的“数据库优先代码”功能来生成 POCO 类以与 PetaPoco 一起使用。只需生成它们并删除所有不必要的 EF 垃圾,如 DBContext 和属性。这样,您不仅可以为 C# 生成 POCO,还可以为 VB.NET 及其所有可视化单击生成 POCO,而不会与 T4 模板混淆。
项目/添加新项目.../Data/ADO.NET 实体数据模型/代码首先来自数据库