【问题标题】:Entity Framework 5 namespaces实体框架 5 命名空间
【发布时间】:2013-01-11 18:03:15
【问题描述】:

我想首先将 Entity Framework 5 数据库添加到面向 .net framework 4.5 的 Visual Studio 2012 的类库中。我对需要输入的所有标签感到困惑:

  • 将 ADO.NET 实体数据模型添加到项目时的 EDMX 文件名。我输入了“MyEF.edmx”。
  • 将连接字符串保存到配置文件时。我输入了“我的实体”。
  • 在选择了一些要包含在我的模型中的表后,有一个文本框可以输入模型命名空间。我输入了“MyModel”。
  • MyEF.edmx 文件的属性“自定义工具命名空间”。我输入了“TheEF”。
  • MyEF.Context.tt 文件的属性“自定义工具命名空间”。我输入了“TheContext”。
  • MyEF.tt 文件的属性“自定义工具命名空间”。我输入了“TheModel”。

用ADO.NET实体数据模型设计器打开MyEF.edmx,查看MyModel的属性,有:

  • 实体容器名称,填充“MyEntities”。所以连接字符串的名字就放在这里了。
  • 命名空间,用“MyModel”填充。这来自表格选择文本框。

将某些东西放入 edmx 自定义工具命名空间似乎没有任何作用。我得到这个结论是因为当我 grep 整个源代码文件夹时,我发现它只在一个 vbproj 文件中。

将“TheModel”放入 MyEF.tt 自定义工具命名空间会从 MyEF.Context.vb 中产生错误,提示未定义类型“MyTable”(这是我的数据库表的名称)。

谁能解释每个标签的用途?

如果我想将这个 edmx 生成的所有类(DbContext、模型等)放入一个命名空间“MyEF”中,我应该在每个地方放什么?

【问题讨论】:

    标签: entity-framework entity-framework-5


    【解决方案1】:

    各种属性使用如下:

    • EDMX 文件名 --> 用于 EDMX 文件名
    • 连接字符串名称 --> 用于配置文件中的连接字符串名称,也用于 EDMX 的概念模型 (CSDL) 部分的容器名称
    • 模型命名空间 --> 用于 EDMX 的概念模型 (CSDL) 部分的命名空间,也用于附加了 .Store 的存储模型 (SSDL) 部分
    • EDMX 文件的自定义工具命名空间 --> 我认为在使用 T4 生成 POCO 实体时,它不会用于任何事情。使用 EF1 风格的内置代码生成时,设置此属性将为所有生成的文件设置 .NET 命名空间。
    • .Context.tt 文件的自定义工具命名空间 --> 上下文源文件中使用的 .NET 命名空间
    • .tt 文件的自定义工具命名空间 --> 实体源文件中使用的 .NET 命名空间

    请注意,如果您将 .Context.tt 和 .tt 自定义命名空间设置为不同的东西,那么上下文将在与实体类型不同的命名空间中生成,并且不会开箱即用地编译。如果您想在此处使用不同的命名空间,您可以更新 .tt 文件,但更多情况下人们只是为两者使用相同的命名空间。

    另请注意,您可能需要在更改属性后从上下文菜单中为每个 .tt 文件选择“运行自定义工具”,以便重新生成代码。

    【讨论】:

    • 非常有用的答案。非常感谢!
    • 优秀的答案。我对如何/在哪里访问 .Context.tt 和 .tt 文件的自定义工具命名空间感到困惑。万一其他人也遇到这种情况,请右键单击每个文件并转到“属性”。在“属性”窗口中,您将看到“自定义工具命名空间”字段。更改此设置后,您可能必须再次右键单击并单击“运行自定义工具”。
    • 在VS 2013(也可能是更早的版本)中更改自定义工具命名空间属性会立即重新运行该工具,更改属性后无需手动运行它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多