实体类型 [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 不是当前上下文模型的一部分

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

为啥我收到错误实体类型 LAB_INVOICE_VIEW 不是当前上下文模型的一部分。?

实体类型 不是当前背景模型的一部分

实体类型 IdentityRole 不是当前上下文 Asp.net mvc 模型的一部分

实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库