我正在编写一个应用程序,在其中我需要查询某个位置半径内的记录。一开始,我的PCO上只有一对lat / long属性,但我意识到,在SQL中的空间搜索是针对一种列类型的地理信息进行的,这种类型的地理信息可以转换为POCO中的DbGeography (在另一篇文章中引用,并使用EF Powertools反向工程师POCO)。
因此,我看到的问题是,我尽可能地保持POCOS的干净,尽量忽略对实体框架和持久性存储的所有引用/依赖。我的POCOS在一个模型/域程序集中,它不应该有对EF的任何引用。只有我的存储库类和DataStore用于DbContext子类和Fluent配置项目才知道EF。我还使用fluent配置远离DataAnnotation属性。一旦你把DbGeography,你需要‘使用System.Data.Entity.Spatial’和'EF‘,这打破了持久性不可知论的方法,至少对于“平原”旧C#对象。
有了这么多的数据库平台,并且为了使这个系统将来尽可能地得到证明,在我想要切换到另一个持久性存储区的情况下,尽可能少地重写数据存储代码是非常重要的,保持域代码尽可能干净是非常重要的。我感到奇怪的是,EF fluent代码基础配置被引入,并且允许我们不必使用DataAnnotations属性,从而避免了System.Data.Entity的混搭,但在空间上,它们打破了模式。
有人知道怎么接近我想做的事吗?
-在Scott的评论之后更新:所以还有一个小问题。我有对System.Data.Entity的引用,我的模型中有这样的引用:public System.Data.Spatial.DbGeography GeoLocation { get;set;}
在我的配置类中有这样的内容:this.Property(t => this.Property)
'StructuralTypeConfiguration.Property(Expression>)‘C:\Developer\SrcSt\FoodRadar\FoodRadar.DataStore\Configuration\VendorConfiguration.cs 66 Active中,类型'DbGeography’必须是非空值类型,才能用作参数'T‘。
我尝试了另一个反向poco生成器,它使用t4模板并使用System.Data.Entity.Spatial.DbGeography生成,但这仍然需要对EntityFramework的引用。
我应该如何指定映射?
发布于 2015-12-10 21:19:02
在.NET 4.5中,他们意识到需要将DbGeography作为核心.NET框架的一部分,并将其移动到走出EntityFramework.dll中,并进入System.Data.Entity.dll,后者是他们现在提供的与ORM无关的API,以便EF和任何其他.NET都可以在此基础上构建。
https://stackoverflow.com/questions/34211759
复制相似问题