首先是EF6模型 - 实体类型不是当前上下文的模型的一部分

时间:2015-06-09 19:03:45

标签: entity-framework entity-framework-6

我知道有关这个问题的问题已经被问了好几次(我已经全部阅读了)但是我仍然没有解决方案。 大多数处理代码优先设计可能发生的问题,但我做的是模型优先。

我熟悉EF,并且在我的解决方案中有其他工作模型。

  • WPF(净4.5)
  • 实体框架6.1.3 - 模型优先
  • Visual Studio 2013

问题

每个 DbSet<>在我的上下文中被访问时抛出以下错误:

"类型' System.InvalidOperationException '的例外情况发生在EntityFramework.dll中但未在用户代码中处理

其他信息:实体类型xxx不是当前上下文模型的一部分。 "

我是如何创建模型的:

  1. 新项目
  2. 添加edmx - 首先包含表格模型
  3. 使实体继承自实现INotifyPropertyChanged的基类
  4. 删除了基类并修改了.tt文件,因此实体实现了INotifyPropertyChanged
  5. (删除所有内容并从头开始重试)
  6. 连接字符串:

    <add name="Stratus_X_TestEntities" connectionString="metadata=res://*/PartsServiceModel.csdl|res://*/PartsServiceModel.ssdl|res://*/PartsServiceModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=Stratus;initial catalog=StratusX;persist security info=True;user id=user;password=password;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    此连接字符串与我的解决方案中来自不同(和工作!).edmx的连接字符串相同。

    用法:

    using (var ObjectContext = new TestEntities())
    {
        return ObjectContext.AccountingType.ToList();
    }
    

    TestEntities是DbContext。 任何尝试访问ObjectContext.AccountingType或任何其他DbSet&lt;&gt;导致错误。

    我查过的内容:

    • 连接字符串(模型优先 - 见上文)
    • 实体映射正确吗?是
    • 多个实例或几代实体类型 - 没有
    • 实体是否从基类继承而导致错误? 不,我删除了基类并使.tt文件直接在实体中生成INotifyPropertyChanged实现。错误仍然存​​在!
    • 查看模型/实体图(* .edmx)。右键单击违规表和验证。
    • 阅读每个类似的SO问题以寻找想法
    • 在测试解决方案中复制项目:它在单独的解决方案中工作!
    • 将测试项目移至工作解决方案:同样的错误!

    有人可以考虑其他任何事情来尝试/检查吗?

    感谢

2 个答案:

答案 0 :(得分:0)

如果一切正常,只需从edmx中删除对象并重新添加即可。不知何故EF在内部失去了一些联系。这样做解决了我的问题

答案 1 :(得分:0)

我也是EF和.NET的新手,但我认为默认情况下,EF会搜索与上下文的类名相同的连接字符串,因此,可能是, 如果您将连接字符串名称更改为“ TestEntities ”,则可能会有所帮助。