实体类型[class]不是当前上下文的模型的一部分

时间:2014-07-16 12:32:13

标签: c# sql-server-2012 geography entity-framework-6.1

我在本地服务器上有db,我正在尝试使用Entity Framework获取数据。 VS自动创建了edmx模型和连接字符串,现在当我尝试访问这样的数据时:

using (var context = new NSMASEntitiesTEST())
            {
                var mases = context.Mas;
                foreach (var mas in mases) //error on this line
                {
                    //
                }
            }

它给了我以下错误:

实体类型Mas不是当前上下文模型的一部分。

但问题是我只对具有一列geography数据类型(f.e. 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

只有当我想访问第二个表时它才会出错,所以它肯定是由地理类型引起的。

2 个答案:

答案 0 :(得分:1)

好的,我已经解决了。 EF 6生成此数据类型错误。

在旧版本的EF中,此数据类型位于System.Data.Spatial.DbGeography,EF 6仍然生成geography数据类型。但它现在应该是System.Data.Entity.Spatial.DbGeography

我刚刚在包含geography数据类型的每个类(表)中对此进行了重写,所有这些表现在都运行良好。

答案 1 :(得分:0)

尝试Linq:

List<int> myMasId = context.Mas.Select( x => x.MasId).ToList();

然后你可以遍历列表。

如果您想使用整个系列:

 List<Mas> masData = context.Mas.AsQueryable().ToList<Mas>();

如果这也不起作用,那么Intellisense呢?

context.Mas是否显示有效的方法?如果没有,则上下文和模型之间存在问题