- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据库中有一个表,我想为其创建一个带有 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/
如果我有一个 ResultColumn 的 POCO 类属性集,然后当我执行 Single() 时调用,我的结果列未映射。我已将我的列设置为结果列,因为它的值应该始终 由 SQL 列的默认约束生成。我
我想在大约有 600 个表的表上使用 PetaPoco,但我只想映射少数表。 有没有办法明确声明我想要映射的表? t4 模板中的配置 (tables["tablename"].Ignore = tru
在 PetaPoco 网站上给出的示例中,这是装饰类的方法: [PetaPoco.TableName("articles")] [PetaPoco.PrimaryKey("article_id")]
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
我们当前的应用程序使用智能对象样式来处理数据库。我们正在研究改用 PetaPoco 的可行性。查看我注意到的功能,您可以添加属性以使 CRUD 对象更容易。添加这些属性是否有任何我应该注意的负面影响?
我正在开始一些新项目,我想使用 PetaPoco(我之前在其他项目中使用过它)或 NPoco。 我知道 NPoco 是 PetaPoco 的一个分支(基于 v4.x),而 PetaPoco 现在是 v
PetaPoco很棒,涵盖了paged queries和Multi-Poco mapping,但是我试图弄清楚是否有办法将它们组合在一起? 编辑: 这是我用来获取MultiPoco数据的存储库方法:
我只是以多线程方式测试 PetaPoco 事务... 我有一个简单的测试用例: -- 简单的值对象称之为 MediaDevice -- 插入一条记录,更新1000次 void TransactionT
我正在尝试使用 PetaPoco 将表格转换为 POCO。 在我的表中,我有一个名为 TheEnum 的列.此列中的值是表示以下枚举的字符串: public enum MyEnum { Fre
我正在尝试使用 petapoco 将对象列表传递给存储过程,该存储过程返回一条消息,指出没有托管 native 类型可以将我的对象类型映射到,并且我不完全理解原因以及如何纠正它。 我正在使用 Azur
使用 PetaPoco,如何调用带有类型参数的存储过程?在 C# 中我这样做: cmd.Parameters.Add("@email", SqlDbType.NVarChar).Value = ema
尝试在 petapoco 中保存 tt 文件时出现此错误。我已经从类库上的 nuget 包管理器安装了 petapoco,但它没有按预期创建自动生成的模型文件夹。所以为了玩玩,我从我的旧项目中复制了模
我的一个列上有一个 BIT 数据类型。 我写了一个查询 SELECT * FROM TABLE WHERE BITCOLUMN <> @0 如果我传入 1 或 0,它工作正常,但如果我传入 3,Pet
在数据库中,我有一个列,它包含逗号分隔值,如下所示: Foo.Bars varchar(100): @;1,5 在代码中,DTO 包含一个列表,如下所示: public class Foo { pub
不要问为什么,但有四个数据库。其中之一我有权修改架构。我们称它为外部。同样,这是一项遗留交易,但在其他三个数据库之一(称为 main)中有大约 60 个表。这些表中的每条记录都有一个字段,该字段将
我正在尝试使用 Petapoco 的多 poco 查询。 代码在我运行 .NET 4.6.1 的本地机器上运行良好,但在部署到我正在使用的运行 .NET 4.5 的主机时抛出 System.Secur
我是 .net 的新手,这是我使用 c# winforms 的第一个项目。对于 DAL,我选择 petapoco。 我浏览了 petapoco 的示例代码,我有一些我感到困惑的基本问题 我的项目是多用
给定一个这样的查询字符串 SELECT * FROM articles WHERE article_id=@0 OR article_title=@1 确定参数总数(可能是正则表达式?) 为每
我有以下类(class): public class Foo { public int Id { get; set; } ... public Boo Boo1 { get;
在我的项目中,我们使用 petapoco 作为数据访问的 ORM。但是我在删除具有一对多关系的数据时遇到了一些困难。我有两个名为用户和组的表。在这里,一个用户可以是多个组的成员。因此用户和组表通过使用
我是一名优秀的程序员,十分优秀!