实体框架6和空间数据

7

我有一个带有空间数据类型的数据库,使用基于数据库的模型和Entity Framework 6.0.2和.NET 4.5。当我尝试使用生成的类时,会出现以下错误:

指定的架构无效。错误: 由于类型“Model.TypeB”不可用,因此未加载关系“Name_FK1”。 在解决上一个错误时,可能有用的信息如下: 类型“Data.TypeB”的属性“Position”具有不能映射到原始类型的“System.Data.Spatial.DbGeography”属性类型。

对于所有使用空间类型的表,都列出了相同的错误。“Name_FK1”是外键关系。

我做错了什么?

谢谢您的帮助。

3个回答

23

我修好了!非常自豪:)

希望这能帮助其他人。所以,从上面的链接(http://msdn.microsoft.com/en-US/data/dn469466)中,有这样一行:

空间类(例如DbGeography、DbGeometry)已经从 System.Data.Spatial => System.Data.Entity.Spatial 移动

之前我遇到了这个错误:

因为类型“IntakeModel.Location”不可用,关系“IntakeModel.FK_Assignee_HomeLocation”未加载。以下信息可能有助于解决前面的错误:类型“ConsoleApplication3.Location”上的属性“Geo”具有无法映射到基元类型的“System.Data.Spatial.DbGeography”的属性类型。

我只需要在我的Location.cs文件中做出这些更改:

public System.Data.Spatial.DbGeography Geo { get; set; }

变为:

public System.Data.Entity.Spatial.DbGeography Geo { get; set; }

问题已解决。感谢@Ricky Jones发布的链接。


3
但是 System.Data.Entity.Spatial 是在 EntityFramework.dll 中的。你是在告诉我我必须在我的 POCO 实体类库中添加对 Entity Framework 的引用吗? - KellySandwiches

5

这是升级应用程序的链接。我有一个新的应用程序,我使用NuGet添加了EF 6.0,然后我添加了新的数据 - ADO.NET实体数据模型。但是这对我来说不起作用。 - UrosP
我有和你完全相同的错误信息,我建议你确保没有引用 System.Data.Entity.dll,并执行第三步,即删除代码生成模板,然后点击设计器并选择添加代码生成项... 这是我能提供的唯一建议,因为这对我起作用了。 - Ricky Jones
我已经尝试过,但失败了。当我尝试添加EF 6时,我只有EF 5.x DbContext生成器选项。没有EF 6.x DbContext生成器选项。我百分之百确定我安装的是EF 6而不是EF 5。 - UrosP

1
这个问题是由于您为一个 EF 6.0 edmx 创建了一个 EF 5.x DbContext Generator 导致的。 要解决这个问题,您只需要删除旧的 DbContext Generator 并使用 EF 6.0 DbContext Generator 创建一个新的。 对我来说这很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接