实体框架:难度映射函数参数

时间:2011-09-13 23:30:25

标签: c# entity-framework entity-framework-4

我试图在我的模型中创建一个实体,该实体有两个属性来指定它的纬度和经度。在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但不映射以下内容   功能参数:纬度,经度。

我必须以某种方式错误地声明属性。也许它在我的模型中。欢迎任何建议!

2 个答案:

答案 0 :(得分:3)

据我所知,您当前的实体未映射LatitudeLongitude。这意味着你永远不能从数据库中加载它们,也无法将它们保存到数据库中 - 没办法。

您的存储过程不能指望EF不支持任何参数。如果您的数据库表使用Geography数据类型,则还必须提供视图,该视图会将其分成单独的LatitudeLongitude列。您的实体必须具有LongitudeLatitude作为属性,并且必须映射到视图。您的程序必须接受映射的LatitudeLongitude作为参数。

EF的下一个主要版本应直接支持Geography

答案 1 :(得分:2)

假设您已使用ADO.NET实体数据模型在EF和数据库之间进行映射,映射到SP的最简单方法是使用模型浏览器中的向导。

  1. 打开模型浏览器
  2. 选择商店节点
  3. 转到存储过程并选择要用
  4. 映射的存储过程
  5. 右键单击该项目,然后选择“功能导入”。将出现向导对话框。
  6. 单击“获取列信息”按钮
  7. 单击“创建复杂类型”按钮,这将根据列信息
  8. 创建一个类型
  9. 在广播控件中,选择“复合”并关联已创建的新复杂类型
  10. 点击确定
  11. 这将创建一个可以使用的新功能。它将处理与SP的通信,包括参数,同时您可以像普通函数一样使用它。