EF6 模型优先 - 实体类型不是当前上下文模型的一部分
Posted
技术标签:
【中文标题】EF6 模型优先 - 实体类型不是当前上下文模型的一部分【英文标题】:EF6 model first - The entity type is not part of the model for the current context 【发布时间】:2015-08-24 18:41:42 【问题描述】:我知道关于这个问题的问题已经被问了几十次(我已经全部阅读了),但我仍然没有解决办法。 大多数处理代码优先设计可能发生的问题,但我正在做模型优先。
我熟悉 EF,并且我的解决方案中有其他工作模型。
WPF(净 4.5) 实体框架 6.1.3 - 模型优先 Visual Studio 2013问题:
Every DbSet 在我的上下文中被访问时抛出以下错误:
“在 EntityFramework.dll 中发生了 'System.InvalidOperationException' 类型的异常,但未在用户代码中处理
附加信息:实体类型 xxx 不是当前上下文模型的一部分。 "
我是如何创建模型的:
-
新项目
添加 edmx - 首先包含表模型
使实体继承自实现 INotifyPropertyChanged 的基类
删除了基类并修改了 .tt 文件,因此实体改为实现 INotifyPropertyChanged
(删除所有内容并从头开始重试)
连接字符串:
<add name="Stratus_X_TestEntities" connectionString="metadata=res://*/PartsServiceModel.csdl|res://*/PartsServiceModel.ssdl|res://*/PartsServiceModel.msl;provider=System.Data.SqlClient;provider connection string="data source=Stratus;initial catalog=StratusX;persist security info=True;user id=user;password=password;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
此连接字符串与我的解决方案中来自不同(并且有效!).edmx 的连接字符串相同。
用法:
using (var ObjectContext = new TestEntities())
return ObjectContext.AccountingType.ToList();
TestEntities 是 DbContext。 任何访问 ObjectContext.AccountingType 或任何其他 DbSet 的尝试都会导致错误。
我检查过的内容:
连接字符串(模型优先 - 见上文) 实体映射正确?是的 实体类型的多个实例或代 - 否 从基类继承的实体是否会导致错误? 不,我删除了基类并使 .tt 文件直接在实体中生成 INotifyPropertyChanged 实现。错误仍然存在! 查看模型/实体图 (*.edmx)。右键单击有问题的表,然后验证。 阅读所有类似的 SO 问题以获取想法 在测试解决方案中复制项目:它在单独的解决方案中工作! 将测试项目移入工作解决方案:同样的错误!谁能想到其他可以尝试/检查的方法?
谢谢
【问题讨论】:
您的连接字符串是否具有正确的 ssdl/mdl/csdl 文件名?尝试清洗溶液? 非常感谢!我没有意识到 ssdl/mdl/csdl 位是不同的。我有两个模型连接到同一个数据库,所以它们自然而然地具有相同的名称。我必须重命名一个并确保它们都在我的主 App.Config 文件中,现在它可以正常工作了! 【参考方案1】:如果一切看起来都不错,只需从 edmx 中删除该对象并重新添加。不知何故,EF在内部失去了一些联系。这样做解决了我的问题
【讨论】:
【参考方案2】:我也是 EF 和 .NET 的新手,但我认为默认情况下 EF 会搜索 与上下文的类名同名的连接字符串,所以,可能是, 如果您将连接字符串名称更改为“TestEntities”,它可能会成功。
【讨论】:
以上是关于EF6 模型优先 - 实体类型不是当前上下文模型的一部分的主要内容,如果未能解决你的问题,请参考以下文章
实体类型 ApplicationUser 不是当前上下文模型的一部分