我正在编写一个应用程序,我需要查询某个位置半径内的记录。我一开始在 PCO 上只使用了一对经纬度属性,但意识到 SQL 中的空间搜索是针对地理列类型完成的,该地理列类型可转换为 POCO 中的 DbGeography(在另一篇 SO 帖子中引用,并且还使用 EF Powertools Reverse)工程师POCO)。
因此,我看到的问题是我保持 POCOS 尽可能干净,尽可能忽略对实体框架和持久性存储的所有引用/依赖项。我的 POCOS 位于模型/域程序集中,它不应该有任何对 EF 的引用。只有我的 Repository 类和 DbContext 子类的 DataStore 以及 Fluent Configuration 项目了解 EF。我还使用流畅的配置远离 DataAnnotation 属性。一旦您放置了 DbGeography,您就需要“使用 System.Data.Entity.Spatial”和“EF”,这会破坏持久性不可知的方法,至少对于“普通”旧 C# 对象.
由于存在如此多的数据库平台,并且为了使该系统尽可能面向未来,并且在我想要切换到另一个持久性存储时以最小的努力重写数据存储代码,保持我的域代码尽可能干净非常重要。我觉得奇怪的是,引入了基于 EF 流畅代码的配置,并允许我们不必使用 DataAnnotations 属性,因此将 System.Data.Entity 排除在混合之外,但在空间方面,它们打破了模式。
有谁知道如何完成我想做的事情?
--斯科特评论后更新:
所以还有一个小问题。
我有对 System.Data.Entity 的引用,并且我的模型上有这个:公共 System.Data.Spatial.DbGeography GeoLocation { 获取;放; }
我的配置类中有这个:this.Property(t => t.GeoLocation).HasColumnName("GeoLocation").HasColumnType("地理");
this.Property 带有下划线,我收到此编译错误:严重性代码 说明 项目文件行抑制状态
错误 CS0453 类型“DbGeography”必须是不可为 null 的值类型,才能将其用作泛型类型或方法“StructuralTypeConfiguration.Property(Expression>)”FoodRadar.DataStore C:\Developer\SrcSt\ 中的参数“T” FoodRadar\FoodRadar.DataStore\Configuration\VendorConfiguration.cs 66 活动
我尝试了另一个反向 poco 生成器,它使用 t4 模板,并使用 System.Data.Entity.Spatial.DbGeography 生成,但这仍然需要引用 EntityFramework。
我应该如何指定映射?
从 .NET 4.5 开始,他们意识到需要DbGeography
作为核心 .NET Framework 的一部分并将其移动出EntityFramework.dll https://msdn.microsoft.com/en-us/library/system.data.entity.spatial.dbgeography(v=vs.113).aspx并进入系统数据实体.dll https://msdn.microsoft.com/en-us/library/system.data.spatial.dbgeography(v=vs.110).aspx,这是他们现在提供的 ORM 不可知 API,以便 EF 和任何其他 ORM 都可以基于它进行构建。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)