如何在不引用Entity Framework的情况下使用Entity Framework Code-First中的空间类型

5
我有一个拥有空间数据的实体...我正在使用在System.Data.Entity程序集中引用的DbGeography和DbGeometry...
我没有使用EntityFramework.dll中引用的那个,因为我有一个分层解决方案,我不想在整个解决方案中都引用Entity Framework,只想在DAL中引用...
当我尝试添加新迁移时,我会收到以下错误:
"EntityType 'DbGeometry' has no key defined. Define the key for this EntityType."
所以我尝试使用字符串OnModelCreating替换DbGeometry属性,我尝试编写了以下代码:
modelBuilder.Entity<AddressInfo>()
    .Property(s => s.GeometryLocation)
    .HasColumnType("geometry");

在这种情况下,我收到了错误消息,指出字符串数据类型与DbGeometry数据类型不兼容...
有人有解决这个问题的想法吗?有人知道哪种数据类型与DbGeometry数据类型兼容吗?
谢谢。
更新 EntityType 'DbGeography' has no key defined不能解决我的问题... 最后,帖子的作者说:

[他]必须在[他]的模型中添加对Entity Framework的引用

这正是我想要避免的...
Ryan也说:

我认为可以通过巧妙的数据配置映射来修复它,如果我找到任何可行的技术,我会进行更新

有什么办法可以解决这个问题吗? 有哪些兼容的数据类型可以替换DbGeometry?

1
可能是EntityType 'DbGeography' has no key defined的重复问题。 - moondaisy
当引用DAL时,如果要使用DAL,则还必须引用EF。 - Sir Rufo
@Sir Rufo:所有内容都正确封装在DAL中,并且使用其他一些模式,我将每个层与EF解耦。 - Simone
1
@moondaisy: 我之前读过那个,但它并没有解决我的问题... 事实上,Ryan说他在模型中引用了EF... 但他也说:"我认为可以通过一个巧妙的数据配置映射来解决,我会试一试,如果找到可行的技术,我会更新的"... 我正在寻找这个解决方案 - Simone
如果您将BLL与业务对象一起分层,然后在应用程序层中使用它们,您可以将实体转换为这些对象,因此只有BLL需要了解EF。问题出现在您将实体一直传递到应用程序层时...我遇到了麻烦....好吧,这是一篇一年前的帖子,我知道。 - Shockwaver
2个回答

2
如果您使用的是EF5,则应该使用System.Data.Spatial中引用的DbGeography和DbGeometry。但如果您使用的是EF6,则应该使用System.Data.Entity.Spatial中引用的DbGeography和DbGeometry。

2
System.Data.Entity.Spatial 命名空间位于 EntityFramework.dll 中... 如果我使用它,每个层都将依赖于 Entity Framework。 - Simone

1

真是太糟糕了...我的所有解决方案都将依赖于Entity Framework :( - Simone

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