DbGeography替代C#POCO

时间:2015-12-10 21:08:27

标签: c# entity-framework spatial

我正在编写一个应用程序,我需要查询某个位置半径范围内的记录。我开始在我的PCO上只有一对纬度/长的属性,但意识到SQL中的空间搜索是针对列类型的地理位置完成的,这种搜索在POCO中转换为DbGeography(在另一个SO帖子中引用,也使用EF Powertools Reverse)工程师POCO)。

所以,我看到的问题是我尽可能地保持我的POCOS干净,尽可能地将所有引用/依赖性遗漏给实体框架和持久性存储。我在模型/域组件中有我的POCOS,它永远不应该引用EF。只有我的Repository类和DataStore for DbContext子类和Fluent Configuration项目才知道EF。我还使用流畅的配置远离DataAnnotation属性。只要您使用DbGeography,您就需要使用System.Data.Entity.Spatial'和' EF'这打破了持久性不可知的方法,至少对于" Plain"旧C#对象

有了这么多的数据库平台,并且尽可能地使这个系统成为未来的证明,只需要很少的努力来重写数据存储代码,我想切换到另一个持久性存储,保持我的域名非常重要代码尽可能干净。我发现基于EF流畅的基于代码的配置被引入并且允许我们不必使用DataAnnotations属性,因此保持System.Data.Entity不在混合中,但是在空间上他们打破了模式,这很奇怪。

有谁知道如何处理我想要做的事情?

- 斯科特评论后的更新: 所以还有一个小问题。 我有对System.Data.Entity的引用,我在我的模型上有这个: public System.Data.Spatial.DbGeography GeoLocation {get;组; }

我在配置类中有这个: this.Property(t => t.GeoLocation).HasColumnName(" GeoLocation")。HasColumnType(" geography");

this.Property加下划线,我得到了这个编译错误: 严重级代码说明项目文件行抑制状态 错误CS0453类型' DbGeography'必须是不可为空的值类型才能将其用作参数' T'在泛型类型或方法' StructuralTypeConfiguration.Property(Expression>)' FoodRadar.DataStore C:\ Developer \ SrcSt \ FoodRadar \ FoodRadar.DataStore \ Configuration \ VendorConfiguration.cs 66 Active

我尝试了另一个使用t4模板的反向poco生成器,它使用System.Data.Entity.Spatial.DbGeography生成,但仍需要引用EntityFramework。

我该如何指定映射?

1 个答案:

答案 0 :(得分:6)

从.NET 4.5开始,他们意识到需要将DbGeography作为核心.NET Framework的一部分,并将其out of EntityFramework.dll移动到System.Data.Entity.dll,这是他们的ORM不可知API现在提供,以便EF和任何其他ORM可以构建它。