【问题标题】:Tool to generate C# DTO Class for SQL Table AND DTO Instances for each Row in Table为 SQL 表和表中每一行生成 DTO 实例的 C# DTO 类的工具
【发布时间】:2012-04-21 03:51:01
【问题描述】:

我正在寻找一种工具或技术,可以让我指向 SQL Server 数据库中的一个表,为该表生成一个 DTO 类,然后为该表中的每一行生成 DTO 类实例。

在 SQL Server 中给定一个表

CREATE TABLE 
[dbo].[Tickets](
[TicketID] [int] IDENTITY(1,1) NOT NULL,
[TicketName] [varchar](50) NOT NULL,
CONSTRAINT [PK_Tickets] PRIMARY KEY CLUSTERED ([TicketID] ASC)

填充数据:

TicketID   TicketName
1          Green
2          Blue

会生成一个名为“Tickets”的类,并带有属性:

 public int TicketID {get;set;}
 public string TicketName {get;set;}

然后是这样的:

public List<Tickets> LoadDataIntoListOfTickets()
{
     List<Tickets> theList = new List<Tickets>;
     theList.Add(new Ticket(){TicketID = 1, TicketName = "Green"});
     theList.Add(new Ticket(){TicketID = 2, TicketName = "Blue"});
     return theList;  
}

我不想生成 INSERT 语句以发送到 SQL Server。我想为数据创建 DTO 类和实例。

澄清:我正在寻找 DTO 类的代码生成以及数据中每一行的 DTO 实例的源代码,因为它存在于特定时间点。我熟悉可以创建类的各种 ORM。我正在寻找的是会生成 LoadDataIntoListOfTickets() 列表的东西,其中包含数据库中每个 ROW 的一行源代码。 (希望这能说明问题。)

说明 #2: 当用户为应用程序创建新数据库时,这将用于替换文本文件中用于初始化表的 SQL INSERT 语句。拥有一个带有 SQL INSERT 语句的文本文件使我能够使用传统的版本控制工具来管理我们的数据库初始化过程。它工作得非常好,但它不像在 DTO 实例中存储数据那样具有人类可读性(空白/对齐)或可重用性。序列化为 XML 会降低可读性。二进制序列化(本质上)会使其不可读,并且几乎不可能与以前的版本进行有意义的比较/合并。

有没有人知道可以做到这一点的工具或库?

【问题讨论】:

  • 你看过ORM工具吗?实体框架? LINQ 到 SQL?休眠?
  • 另外:小提示 - 通常你不会故意阅读 all 行 - 只是在适当过滤的子集中你需要的那些
  • 也许我的问题需要更清楚。我去编辑一下。
  • 您的意思是您希望该工具提前查询数据,并生成代码来表示当时所见的数据,以便可以单独使用?如果是这样,那是可能的——通常是通过序列化。
  • 不,我不是在寻找传统的序列化。

标签: c# sql-server code-generation dto


【解决方案1】:

如果您真正追求的是一种让新数据库从不包含任何内容到包含数据库、架构和初始数据集的方法,那么我强烈建议您研究数据库迁移工具。它们将帮助您在多个安装/环境中保持可读性和同步。

您可以在此处找到列出的几个: https://stackoverflow.com/questions/8033/database-migration-library-for-net

我个人更喜欢https://github.com/dradovic/MigSharp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2021-06-16
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多