【问题标题】:How to use spatial type with Entity Framework code-first without referencing Entity Framework如何在不引用实体框架的情况下将空间类型与实体框架代码优先使用
【发布时间】:2017-08-15 03:18:04
【问题描述】:

我有一个包含一些空间数据的实体...我正在使用System.Data.Entity 程序集中引用的DbGeographyDbGeometry...

我没有使用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 没有解决我的问题。最后,帖子的作者说

[He] 确实必须在 [his] 模型中添加对 Entity Framework 的引用

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

Ryan 也这么说

我认为它可能可以通过一个聪明的数据配置映射来修复,我会玩它,如果我遇到任何可行的技术会更新

知道如何解决吗? 哪种数据类型可以替代 DbGeometry?

【问题讨论】:

  • 引用 DAL 时,如果要使用 DAL,还必须引用 EF
  • @Sir Rufo: 一切都正确封装在 DAL 中,并且使用其他一些模式我从 EF 中解开了所有其他层
  • @moondaisy:我已经读过了,但它并没有解决我的问题。事实上,Ryan 说他在他的模型中引用了 EF ......但他也说“我认为它可以用不过,一个聪明的数据配置图,我会玩它,如果我遇到任何可行的技术,我会更新”......我正在寻找那个解决方案
  • 如果您还使用业务对象将 BLL 分层,然后在 App 层使用,您可以将您的实体转换为这些对象,因此只有您的 BLL 需要了解 EF。当您将实体一直传递到应用程序层时会出现问题,而不是......我遇到了麻烦......好吧 1 岁的帖子,我知道

标签: c# entity-framework geospatial spatial


【解决方案1】:

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

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

【讨论】:

  • System.Data.Entity.Spatial 命名空间在 EntityFramework.dll... 如果我使用它,每一层都将依赖于实体框架
【解决方案2】:

可能有人会过来给出答案(我真的希望有人这样做),但据我所知,这是不可能的。我自己已经经历了很长一段时间,但我还没有想出一个好的、可用的解决方案。如果要使用 DbGeography,无论如何都必须添加对 EntityFramework.dll 的引用(但不了解 DbGeometry)。

这是文档:

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

这表明它在 EntityFramework.dll 中。

【讨论】:

  • 多么糟糕的事情......我所有的解决方案都将依赖于实体框架:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多