【问题标题】:Create Entity Framework Without t4 code generator (like vs 2010)创建没有 t4 代码生成器的实体框架(如 vs 2010)
【发布时间】:2016-03-14 12:11:30
【问题描述】:

我想使用 VS 2015 创建一个基于数据库的实体框架模型。

有点问题:

1) 当我想创建模型时,我会收到以下警告:

2) 当我创建模式时,会生成一些文件,例如 T4。

3) 生成的类没有像这样的数据注释:

[EdmEntityTypeAttribute(NamespaceName="SomeModel", Name="tblCode1")]
[Serializable()]
[DataContractAttribute(IsReference=true)]

4) 在我们小组中,有些人有 VS 2013 或 2010,他们不能使用这种类型的模型。

如何在没有 T4 的情况下使用 VS 2015(如 VS 2010 或 2013)创建模型(如下所示只有 2 个文件)

【问题讨论】:

  • 您是说将代码生成策略更改为 Legacy ObjectContext 吗?不敢相信它会这么简单,但以防万一。
  • 详细说明需要重新编码的内容。您正在解析什么语法以及它的外观?我见过 .tt 模板,但从我的角度来看,它有点矫枉过正,构建自己的解析器要容易得多,但是您需要了解一些有关解析器构造(标记化、语义树构造)的基础知识,还需要了解一些语言你想解析。我可以为您编写演示解析器,但需要更深入地了解您在此处解析的内容。
  • 是的,这是 ObjectContext API。它曾经是 edmx 的代码生成策略中的“默认”。我不知道在 VS2015 中是否仍然如此(这里没有安装它)。在开始使用新安装的 VS20xx 后,您可能忘记了您和您的同事过去采取的一些步骤,因为我相信自 EF 4.3 以来,DbContext 一直是预设的代码生成策略。此消息是每个人第一次点击离开(不再显示)然后忘记的消息。但现在最重要的一句话:尽一切可能迁移到 DbContext!
  • 哦,这个“默认”代码生成策略默认没有被选中。默认选项早就是“None”,实际上不是“none”而是t4。现在谁仍然明白这一点,恭喜!
  • @GertArnold 在 VS2013/2015 中,该选项称为“T4”:) 并且是默认选项。

标签: c# entity-framework


【解决方案1】:

简答:

您需要将edmxCode Generation Strategy 属性从“T4”更改为“Legacy ObjectContext”并从解决方案中删除.tt 节点出口商。

长答案:

以下是所需的步骤:

(1) 假设您首先选择“Add -> New Item -> ADO.NET Entity Data Model -> EF Designer from database”。

(2) 遵循“实体数据模型向导”。接下来是非常重要。当您进入询问您要使用的 EF 版本的屏幕时,请确保选择 EF 5.0,否则 T4 模板将是您拥有的唯一选项:

(3) 完成向导。对您的第一个屏幕截图等安全警告说“好”。项目结构将类似于您的第二个屏幕截图。

(4) 在设计器中打开edmx 文件。查看属性窗口,有一个名为Code Generation Strategy 的属性,默认为“T4

将属性更改为“Legacy ObjectContext

(5) 从解决方案资源管理器中删除 YourModel.Context.ttYourMdel.tt 节点,您就完成了。

有点无聊,但做你想做的事。缺点是您仅限于使用过时的 EF 版本,而即将推出的 EF7 将完全停用 edmx,因此现在可能是开始考虑切换到 Code First 方法的好时机。但在那之前,希望以上内容能帮助您保持当前流程。

【讨论】:

    【解决方案2】:

    要生成“代码优先”模型(从数据库获取代码优先模型),您还可以使用 Code Smith 生成器。您可以从 POCO 类模板开始(如果您需要序列化、IDataErroInfo、INotifyPropertyChanged 等实现,则可以从 NHibernate 模板开始)并自定义它们非常简单(语法基于 ASP)。可能还有免费版。

    环顾四周,我还发现了一篇文章和一个从 SQL Server 数据库中提取 POCO 类的开源工具。
    http://www.codeproject.com/Articles/892233/POCO-Generator

    【讨论】:

    • 我与 EF 合作多年,同时使用 EDMX 和 Code First。我强烈建议您像 Bubi 建议的那样使用 Code First。这是一个小的学习曲线,但要好得多,当它发布并准备好升级时,升级到 EF7 会更容易。使用 Code First,您可以获得真正的 POCO 课程,并且没有 T4。
    猜你喜欢
    • 2011-03-22
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多