我有一个包含一些空间数据的实体...我正在使用DbGeography
汇编中引用的DbGeometry
和System.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的兼容数据类型?
答案 0 :(得分:1)
如果您使用的是EF5,则应使用DbGeography
中引用的DbGeometry
和System.Data.Spatial
。
但如果您使用的是EF6,则应使用DbGeography
中引用的DbGeometry
和System.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中。