实体类型 [class] 不是当前上下文模型的一部分
Posted
技术标签:
【中文标题】实体类型 [class] 不是当前上下文模型的一部分【英文标题】:The entity type [class] is not part of the model for the current context 【发布时间】:2014-07-16 12:32:13 【问题描述】:我在本地服务器上有 db,我正在尝试使用实体框架获取数据。 VS 自动创建了 edmx 模型和连接字符串,现在当我尝试访问这样的数据时:
using (var context = new NSMASEntitiesTEST())
var mases = context.Mas;
foreach (var mas in mases) //error on this line
//
它给了我以下错误:
实体类型 Mas 不是当前上下文模型的一部分。
但问题是,我只在具有一列geography
数据类型(例如Mas
)的表中收到此错误。其他表工作正常。
我想知道这个问题是否可能只是因为地理数据类型而引起的,因为我查看了类似问题的答案,但对我没有任何帮助。
在Mas.cs
:
public partial class Mas
public int MasId get; set;
public string MasName get; set;
//...
public Nullable<System.DateTime> MasContractSzif get; set;
public System.Data.Spatial.DbGeography MasBoundary get; set;
编辑:
我创建了 2 个空表用于测试:
第一个有 2 列 INT 和 NVARCHAR(50)
第二个,包含 3 列 INT、NVARCHAR(50) 和 GEOGRAPHY
只有当我想访问第二个表时它才会给我错误,所以它肯定是由 geography 类型引起的。
【问题讨论】:
在您的 ObjectContext 中发布 Mas 实体的定义。 那么,您是否尝试删除geography
?那时发生了什么?你遇到过哪些类似的问题?您能否链接到它们以避免建议这些解决方案的答案?
这是什么版本的实体框架?
已更新,仅当表包含 geography
数据类型时才会出现错误。
【参考方案1】:
好的,我已经解决了。 EF 6 生成此数据类型错误。
在旧版本的 EF 中,此数据类型位于 System.Data.Spatial.DbGeography
中,而 EF 6 仍然像这样生成 geography
数据类型。但现在应该是System.Data.Entity.Spatial.DbGeography
。
我刚刚在每个包含 geography
数据类型的类(表)中重写了这个,所有这些表现在都可以正常工作。
【讨论】:
【参考方案2】:试试 Linq:
List<int> myMasId = context.Mas.Select( x => x.MasId).ToList();
然后你可以遍历列表。
如果你想拥有整个 Collection 使用:
List<Mas> masData = context.Mas.AsQueryable().ToList<Mas>();
如果这也不起作用,那么 Intellisense 呢?
context.Mas 是否显示有效方法?如果不是,则上下文和模型之间存在问题
【讨论】:
以上是关于实体类型 [class] 不是当前上下文模型的一部分的主要内容,如果未能解决你的问题,请参考以下文章
实体类型 ApplicationUser 不是当前上下文模型的一部分
为啥我收到错误实体类型 LAB_INVOICE_VIEW 不是当前上下文模型的一部分。?