我试图在我的模型中创建一个实体,该实体有两个属性来指定它的纬度和经度。在Sql Server 2008 R2中,我使用表中的单个列来存储此信息。该列属于地理类型。为了对数据库使用实体,我希望映射3个存储过程来插入,更新和删除数据库中相应表的行。但是,我无法在没有任何错误的情况下编译包含我的模型的程序集。我使用EF 4还不是很新,所以我不太清楚如何正确地做到这一点。我的部分课程看起来像:
public partial class MyEntity
{
private double latitude;
private double longitude;
public double Latitude { get {return latitude;} set {latitude = value; }
public double Longitude { get {return longitude;} set {longitude = value; }
}
我的存储过程采用纬度和经度参数(删除存储过程除外)。但是,当我尝试编译项目时,我收到错误:
映射函数绑定指定函数 MyNamespace.Store.sp_insertMyEntity但不映射以下内容 功能参数:纬度,经度。
我必须以某种方式错误地声明属性。也许它在我的模型中。欢迎任何建议!
答案 0 :(得分:3)
据我所知,您当前的实体未映射Latitude
和Longitude
。这意味着你永远不能从数据库中加载它们,也无法将它们保存到数据库中 - 没办法。
您的存储过程不能指望EF不支持任何参数。如果您的数据库表使用Geography
数据类型,则还必须提供视图,该视图会将其分成单独的Latitude
和Longitude
列。您的实体必须具有Longitude
和Latitude
作为属性,并且必须映射到视图。您的程序必须接受映射的Latitude
和Longitude
作为参数。
EF的下一个主要版本应直接支持Geography
。
答案 1 :(得分:2)
假设您已使用ADO.NET实体数据模型在EF和数据库之间进行映射,映射到SP的最简单方法是使用模型浏览器中的向导。
这将创建一个可以使用的新功能。它将处理与SP的通信,包括参数,同时您可以像普通函数一样使用它。