【问题标题】:Generating entity class files from table schema从表模式生成实体类文件
【发布时间】:2011-03-10 19:46:40
【问题描述】:

我正在使用带有 C# 的 LINQ to SQL。 有没有一种方法可以让我们从表模式中生成实体类文件? 通过将表格拖到图形设计器上,生成了类,但它们不是真正的类文件(我的意思是扩展名为 cs 的实际文件)。

我知道我们可以先对类文件进行编码,然后手动或以编程方式创建模式,但我想知道是否可以反过来,可能正在使用一些第三方工具。我觉得这样使用LINQ会很方便。

提前致谢。

【问题讨论】:

    标签: asp.net asp.net-mvc linq-to-sql entity-framework asp.net-mvc-2


    【解决方案1】:

    将表格拖到设计器时生成的所有类都创建为部分类。您没有理由不能只为每个文件创建一个文件并使用它进行必要的修改。

    【讨论】:

    • 我想创建不依赖于 LINQ 的实体类(拥有几乎干净的域模型和持久性无知)。所以把表格拖到设计师那里似乎不是一个解决办法。如果我错了,请纠正我。
    • 啊,从您的问题中,我读到它好像您想要一些可以为您从架构中生成类并支持 LINQ 的东西。目前您使用的是 LINQ to SQL,只有您希望您的类在各自的 .cs 文件中。无论如何,这就是我从问题中得到的。这些类本身存储在 MyDatabase.designer.cs 文件中,您可以将它们从它们复制/粘贴到您自己的 .cs 文件中,并裁剪掉您不想要的东西。唯一的问题是设计者会尝试创建重复的类。
    • 谢谢。顺便说一句,designer.cs 文件中的类包含很多污点。我必须裁剪出很多东西。没有更方便的解决方案来生成干净的实体类。我知道我可以以编程方式生成实体类,但如果有人已经这样做了,我只是好奇,也许使用一些外部工具。
    【解决方案2】:

    我对 LINQ to SQL 的熟悉不如对 Entity Framework (v4) 的熟悉,但 EF 肯定会满足您的要求。您可以从 Microsoft 下载 POCO templates for EF,直接通过 VS2010 在扩展管理器中(工具 > 扩展管理器,单击在线图库,然后搜索 POCO)。该链接不仅仅是模板的下载,而是如何开始的演练。

    我还启动了a series of blog posts,其中包括一些用于实体框架 EDMX 模型的不错的 T4 模板,无论您使用的是默认代码生成模型还是 Microsoft 的 POCO 模板,它都会为您的所有实体类自动生成 DTO 类。自动生成的 DTO 可方便地在 UI 或服务层中使用,并且使您不必在消费层中引入对实体框架的依赖项。从实体对象中获取 DTO 也很容易。

    var people = from p in context.People select p;
    return people.ToDtos();
    

    可能值得一看(无耻的自我宣传)。

    如果您需要/想要坚持使用 LINQ to SQL,请在 google 搜索“linq to sql POCO”,似乎有些人在这方面取得了一定程度的成功,但大多数搜索结果似乎来自2008 年及更早,所以我不确定货币/相关性。

    【讨论】:

      【解决方案3】:

      绝对可以,如果您使用 L2S 的 T4 模板 - http://l2st4.codeplex.com/

      您仍然使用 .DBML 文件,但您需要在文件上将“构建操作”设置为“无”以关闭生成的默认代码的编译。然后从 codeplex 下载中添加 .tt 文件和 .ttinclude 文件。

      T4 模板中有一行代码,您可以根据自己的目的进行修改:

      FilePerEntity = false, // Put each class into a separate file
      

      奇怪的是,Entity Framework 4 也使用这种方法和从模型文件生成代码的双重方法,但是对于 EF,VS2010 中包含了 T4 模板。使用 Linq-to-sql,您必须单独下载 T4 模板。使用 T4 的好处是您可以随时添加其他自定义项。但是,最初生成的代码与您从 .DBML 设计器获得的代码相同。

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 2013-12-23
        • 2010-11-06
        • 2011-11-17
        • 1970-01-01
        • 2010-09-22
        • 2017-06-12
        相关资源
        最近更新 更多