为什么实体框架根据检索数据的方式将两种不同类型(SqlGeography和DbGeography)绑定到Geography类型的相同字段?
尝试通过ExecuteReader
读取数据时收到异常来自物化' Microsoft.SqlServer.Types.SqlGeography'的指定演员表。输入' System.Data.Entity.Spatial.DbGeography'类型无效。
这是一张表:
CREATE TABLE [OneGeoField]([Position] [geography] NOT NULL
数据:
INSERT INTO OneGeoField (Position) VALUES(geography::STGeomFromText('POINT (30.5047009495918 59.862826902743)',4326))
EF为此表生成一个类,其DbGeography类型为Position字段:
public partial class OneGeoField
{
public System.Data.Entity.Spatial.DbGeography Position { get; set; }
}
使用 SqlQuery 方法检索数据时,它可以正常工作
var query = "SELECT * FROM OneGeoField";
var list = db.Database.SqlQuery<OneGeoField>(query).ToList();
但是如果使用 ExecuteReader ,则会抛出异常
try
{
var cmd = db.Database.Connection.CreateCommand();
db.Database.Connection.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
var objectContext = ((IObjectContextAdapter)db).ObjectContext;
var list = objectContext.Translate<Core.OneGeoField>(reader).ToList();
}
catch (Exception ex)
{
throw;
}
finally
{
db.Database.Connection.Close();
}
只有解决方案是为ExecuteReader设置不同的模型,而另一种是常见的方法吗?