从Model-First迁移到Code-First:使用EF 5.x DbContext Fluent Generator的ComplexTypes

时间:2012-09-12 23:15:57

标签: c# entity-framework visual-studio-2012 entity-framework-5

我正在使用NuGet的最新EntityFramework 5。我不知道我做错了,但似乎复杂的类型不适用于这个模板! (???)无论我做什么,我总是得到这个编译时错误:

运行转换:System.InvalidCastException:无法将类型为“System.Data.Metadata.Edm.ComplexType”的对象强制转换为“System.Data.Metadata.Edm.PrimitiveType”。

例如:

  1. 我创建了一个空模型“SimpleModel”,然后我在其中添加了一个简单的实体,“Foo”和一个复杂类型为“Bundle”的复杂属性“Something”。所有这些都使用了EDM设计师。

  2. 我选择“从模型生成数据库”,以便将模型保存在SQLEXPRESS DB中。跑完脚本,一切顺利。我测试了使用新实体模型编写一些东西并且它工作正常,即SaveChanges()工作正常。

  3. 我去了“添加代码生成项”并选择了这个模板: EF 5.x DbContext Fluent Generator 来创建“SimpleModel.tt”系列模板文件,我立刻得到了上面的错误。

  4. 当查看“SimpleModel.Mapping.tt”模板生成的“SimpleModel.Mapping.cs”文件时,我发现此代码文件不完整。这是唯一不完整的文件,即映射代码的生成正在破坏。此模板是否与最新的EF 5兼容?

    我有一个基于ObjectContextEntityObjects的几个表和实体模型的现有数据库(即Model-First东西)。最重要的是,我有一个现有的数据层,它利用映射到这些表的实体,并且许多数据被恰当地捆绑在复杂类型中(捆绑的数字和文本内容没有标识)。

    重点是我需要将我的实体模型从使用ObjectContextEntityObjects迁移到DbContextPOCOs,然后我想转到Code-首先。我应该怎么做?

    事先得到任何帮助!

1 个答案:

答案 0 :(得分:0)

  

我该怎么做?

Imho使用EF Power tools(但我认为他们还不支持EF 5)和逆向工程数据库或编写代码首先映射你自己。

MS不提供该生成器,如果您有任何问题,应将其作为错误报告给开发人员。如果您选中Q/A for this generator in Visual Studio Gallery,则声明不支持复杂类型。