C# 如何在不引用实体框架的情况下,先将空间类型与实体框架代码一起使用

C# 如何在不引用实体框架的情况下,先将空间类型与实体框架代码一起使用,c#,entity-framework,geospatial,spatial,C#,Entity Framework,Geospatial,Spatial,我有一个实体和一些空间数据。。。我正在使用System.Data.Entityassembly中引用的DbGeography和DbGeometry 我没有使用在EntityFramework.dll中引用的那个,因为我有一个分层解决方案,我不想在解决方案中的任何地方引用EntityFramework,而只是在DAL内部 尝试添加新迁移时,出现以下错误: EntityType“DbGeometry”未定义键。定义此EntityType的键 因此,我尝试在ModelCreating上用字符串替换Db

我有一个实体和一些空间数据。。。我正在使用
System.Data.Entity
assembly中引用的
DbGeography
DbGeometry

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

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

EntityType“DbGeometry”未定义键。定义此EntityType的键

因此,我尝试在ModelCreating上用字符串
替换
DbGeometry
属性,我尝试编写以下代码:

modelBuilder.Entity<AddressInfo>()
    .Property(s => s.GeometryLocation)
    .HasColumnType("geometry");
modelBuilder.Entity无法解决我的问题。。最后,这篇文章的作者说

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

这正是我想要避免的

Ryan还说

我认为它可能是一个聪明的数据配置图修复,但我会玩它,并会更新,如果我遇到任何可行的技术

知道怎么修吗?
哪种数据类型可以替代DbGeometry?

如果使用EF5,则应使用
DbGeometry
DbGeometry
中引用的
System.data.Spatial


但是如果您使用的是EF6,您应该使用
System.Data.Entity.spatical
中引用的
DbGeography
DbGeometry
,可能有人会来给出答案(我真的希望有人会),但据我所知,这是不可能的。我自己已经经历了相当长的一段时间,但我还没有想出一个好的、可用的解决方案。如果您想使用DbGeography,则必须添加对EntityFramework.dll的引用,无论发生什么情况(但不知道DbGeometry)

以下是文档:


这表明它位于EntityFramework.dll中。

引用DAL时可能存在重复,如果要使用DAL@Sir所有的东西都被正确地封装在DAL中,我每隔一层就解开了一些其他的图案EF@moondaisy当前位置我已经读过了,但它不能解决问题我的问题。。事实上Ryan说他在模型中引用了EF。。。但他也表示,“我认为它可以通过一个聪明的数据配置图来修复,不过,我会玩它,如果遇到任何可行的技术,我会更新它”。。。我正在寻找解决方案如果你将BLL与业务对象分层,然后在应用层中使用,你可以将实体转换为这些对象,因此只有你的BLL需要了解EF。当您将实体一直传递到应用程序层时,问题就出现了,取而代之的是。。。我有麻烦了。。。。好的,一年前的帖子,我知道
System.Data.Entity.Spatial
名称空间在
EntityFramework.dll
中。。。如果我使用它,每一层都将依赖于实体框架这是一件坏事。。。我的所有解决方案将取决于实体框架:(