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

Cic*_*cio 5 c# entity-framework spatial geospatial

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

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

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

EntityType“DbGeometry”没有定义键。定义此 EntityType 的键。

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

modelBuilder.Entity<AddressInfo>()
    .Property(s => s.GeometryLocation)
    .HasColumnType("geometry");
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我收到字符串数据类型与数据类型不兼容的错误DbGeometry...

有谁有解决这个问题的想法吗?DbGeometry有谁知道哪种数据类型与数据类型兼容?

谢谢

更新

EntityType 'DbGeography' has no key Defined不能解决我的问题。最后,该帖子的作者说

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

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

瑞安还说

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

知道如何修复它吗?哪种数据类型可以替代 DbGeometry?

moo*_*isy 2

如果您使用 EF5,您应该在 中使用DbGeographyDbGeometry引用System.Data.Spatial

但如果您使用 EF6,则DbGeography应该DbGeometrySystem.Data.Entity.Spatial.

  • `System.Data.Entity.Spatial` 命名空间位于 `EntityFramework.dll` 内部...如果我使用它,每一层都将依赖于实体框架 (2认同)