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

标签 c# .net orm petapoco

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

有什么方法可以使用 PetaPoco 从数据库创建模型吗?

最佳答案

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

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

PM>install-package petapoco

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

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

另一种选择是创建一些 TSQL 来生成一些代码。这是我过去用来为我的 PetaPoco 表生成接口(interface)的非常粗糙的示例。

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 + '}'

希望对您有所帮助。

关于c# - 如何使用 PetaPoco 库从数据库自动创建模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10136520/

相关文章:

c# - Azure Blob 和表存储以更简单的方式重写代码

java - Hibernate:在没有表的情况下按字段加载类

c# - 是否有任何内置的集合类型或 IEqualityComparer<T> 用于基于其中的项目的相等性的集合?

.net - C#在字符串中添加一个字符

python - 如何使用别名在 Django 中进行多表连接

python - django 模型 filter() 和 extra()

c# - 组合框的 SelectedValue 不反射(reflect)传递给空项时的更改

c# - 如何在 Resharper 中评估表达式,如 IntellijIdea(Alt+F8)

c# - MVC传模型来查看

c# - 线程重命名