如何在不引用实体框架的情况下首先使用Entity Framework代码使用空间类型

时间:2017-03-22 19:46:45

标签: c# entity-framework geospatial spatial

我有一个包含一些空间数据的实体...我正在使用DbGeography汇编中引用的DbGeometrySystem.Data.Entity ...

我没有使用EntityFramework.dll中引用的那个,因为我有一个分层解决方案,我不想在我的解决方案中到处引用实体框架,但只是在DAL内...

当我尝试添加新迁移时,出现以下错误:

  

EntityType' DbGeometry'没有定义键。定义此EntityType的密钥。

所以我尝试用字符串DbGeometry替换OnModelCreating属性我尝试编写以下代码:

modelBuilder.Entity<AddressInfo>()
    .Property(s => s.GeometryLocation)
    .HasColumnType("geometry");

但在这种情况下,我收到错误,即String数据类型与DbGeometry数据类型不兼容......

有没有人有任何想法解决这个问题?有谁知道哪种数据类型与DbGeometry数据类型兼容?

谢谢

更新

EntityType 'DbGeography' has no key defined并没有解决我的问题。最后,帖子的作者说

  

[他]确实必须在[他的]模型中添加对实体框架的引用

这正是我想要避免的......

瑞安也说过

  

我认为它可以用一个聪明的数据配置图来修复,我会玩它并且如果我遇到任何可行的技术会更新

知道怎么解决吗? 哪个可以是替代DbGeometry的兼容数据类型?

2 个答案:

答案 0 :(得分:1)

如果您使用的是EF5,则应使用DbGeography中引用的DbGeometrySystem.Data.Spatial

但如果您使用的是EF6,则应使用DbGeography中引用的DbGeometrySystem.Data.Entity.Spatial

答案 1 :(得分:1)

有人可能会出现并给出答案(我真的希望有人这样做),但据我所知,这是不可能的。我已经经历了很长一段时间,并且我还没有想出一个好的,可用的解决方案。如果你想使用DbGeography,你必须添加对EntityFramework.dll的引用,不管是什么(不了解DbGeometry)。

这是文档:

https://msdn.microsoft.com/en-us/library/system.data.entity.spatial.dbgeography(v=vs.113).aspx

这表明它位于EntityFramework.dll中。