我的EF在我的Location
表格中配置了User
字段:
public DbGeography Location { get; set; }
但是当我用{
}查询我的User
表时
user = connection.Query<User>("update [User] set LastOnline = @lastOnline output INSERTED.* where Username = @un",
new { lastOnline = DateTime.UtcNow, un = username }).First();
我收到以下错误:
消息=解析列122时出错(位置= POINT(-118.2436849 34.0522342) - Object)Source = Dapper StackTrace: 在Dapper.SqlMapper.ThrowDataException(Exception ex,Int32 index,IDataReader reader,Object value)in d:\ Dev \ dapper-dot-net \ Dapper NET40 \ SqlMapper.cs:4045行 在Deserialize4650b5f0-d037-49ad-802e-8a9be95e8496(IDataReader) 在Dapper.SqlMapper.d__11
1.MoveNext() in d:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 1572 at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1来源) 在Dapper.SqlMapper.Query [T](IDbConnection cnn,String sql,Object param,IDbTransaction事务,Boolean buffered,Nullable1 commandTimeout, Nullable
1 commandType)in d:\ Dev \ dapper-dot-net \ Dapper NET40 \ SqlMapper.cs:第1443行 在App.Services.BrowseService.GetProfiles(ProfileSearchDto查询,String username,Boolean isAdmin)中 c:\ PROJECTS \ App \ App-MAIN \ App \ Services \ BrowseService.cs:第330行 InnerException:System.InvalidCastException 的HResult = -2147467262 Message =无法将类型为“Microsoft.SqlServer.Types.SqlGeography”的对象强制转换为键入 'System.Data.Entity.Spatial.DbGeography'。
造成这种情况的原因是什么?
更新
只是为了踢,我尝试使用EF:
db.Database.SqlQuery<User>("bla bla")
我得到了一个不同的错误:
消息=对象类型不存在映射 &lt;&gt; f__AnonymousTypef`2 [[System.DateTime,mscorlib,Version = 4.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String, mscorlib,版本= 4.0.0.0,文化=中性, PublicKeyToken = b77a5c561934e089]]到已知的托管提供商本机 类型。源= System.Data
秃头
结论
我的应用需要按半径搜索,目前使用的是天真的lat / long盒装查询。我试图升级我的实现以使用空间类型,但看起来我的工具不支持这种情况。回到天真,我走了。
答案 0 :(得分:7)
Dapper不支持核心库中的实体框架类型,以减少依赖项的数量。但是,它具有可扩展的类型处理程序模型,DbGeography
包中包含Dapper.EntityFramework.Handlers.Register();
的绑定。添加完之后,您需要致电:
SqlGeography
要求加载项注册自己。然后它应该工作。如果您遇到程序集不匹配异常,则应该能够使用程序集绑定重定向来解决它。这特别适用于基础Microsoft.SqlServer.Types
类型,其中SQL Server返回的元数据与>>> df[['Id', 'NAME']].groupby('Id').agg(lambda x: ', '.join(x))
NAME
Id
276956 A, B, C
287266 D
包中的元数据的版本不同。但是程序集绑定重定向工作正常。