Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#POCO的DbGeography备选方案_C#_Entity Framework_Spatial - Fatal编程技术网

C#POCO的DbGeography备选方案

C#POCO的DbGeography备选方案,c#,entity-framework,spatial,C#,Entity Framework,Spatial,我正在编写一个应用程序,需要查询某个位置半径范围内的记录。我刚开始在我的PCO上只使用了一对lat/long属性,但我意识到SQL中的空间搜索是针对POCO中的列类型地理进行的,该列类型可向下转换为DbGeography(在另一篇SO文章中引用,并使用EF Powertools反向工程POCO) 所以,我看到的问题是,我尽可能地保持我的POCO干净,尽可能地忽略对实体框架和持久性存储的所有引用/依赖。我的POCO位于一个模型/域程序集中,它不应该有任何对EF的引用。只有我的DbContext子类

我正在编写一个应用程序,需要查询某个位置半径范围内的记录。我刚开始在我的PCO上只使用了一对lat/long属性,但我意识到SQL中的空间搜索是针对POCO中的列类型地理进行的,该列类型可向下转换为DbGeography(在另一篇SO文章中引用,并使用EF Powertools反向工程POCO)

所以,我看到的问题是,我尽可能地保持我的POCO干净,尽可能地忽略对实体框架和持久性存储的所有引用/依赖。我的POCO位于一个模型/域程序集中,它不应该有任何对EF的引用。只有我的DbContext子类和Fluent配置项目的存储库类和数据存储库知道EF。我还使用fluent配置远离DataAnnotation属性。只要你把DbGeography放进去,你就需要“使用System.Data.Entity.Spatial”和“EF”,这打破了持久性不可知的方法,至少对于“普通”旧C#对象来说是如此

由于有这么多的数据库平台,为了使这个系统尽可能地经得起未来的考验,在我想切换到另一个持久性存储时,尽可能少地重写数据存储代码,保持域代码尽可能干净是非常重要的。我觉得奇怪的是,EF fluent基于代码的配置被引入,并且允许我们不必使用DataAnnotations属性,因此避免了System.Data.Entity的混合,但是使用spatial,它们打破了模式

有人知道我要做什么吗

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

我的配置类中有以下内容: this.Property(t=>t.GeoLocation).HasColumnName(“GeoLocation”).HasColumnType(“地理”)

this.Property带有下划线,我得到以下编译错误: 严重性代码描述项目文件行抑制状态 错误CS0453类型“DbGeography”必须是不可为空的值类型,才能将其用作泛型类型或方法“StructuralTypeConfiguration.Property(Expression>)”FoodRadar.DataStore C:\Developer\SrcSt\FoodRadar\FoodRadar.DataStore\Configuration\VendorConfiguration.cs 66 Active中的参数“T”

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


我该如何指定映射呢?

从.NET 4.5开始,他们意识到需要将
DbGeography
作为核心.NET框架的一部分,并将其移动到其中,这是他们现在提供的ORM不可知API,以便EF和任何其他ORM可以基于它进行构建。

非常感谢。现在我看到它位于名称空间System.Data.Spatial中。可能必须让EF Powertools开发人员进行更新。如果这有助于解决您的问题,请继续并标记为答案。@ScottChamberlain我不认为您是对的,System.Data.Entity.dll实际上早于Entity Framework 6(尽管MSDN声称它是在Fx 4.5中引入的)。在任何情况下,我都尝试过编辑POCO模板以指向System.Data.Spatial.DbGeography,但没有效果。不知道为什么这被标记为一个答案,因为现在地理类型在POCOs中没有位置,因为它对EF6程序集有很强的依赖性。