托管实体框架不生成存储过程映射

时间:2013-11-14 08:06:54

标签: c# sql-server visual-studio-2010 stored-procedures

请注意,我正在尝试使用存储过程来插入和更新表记录。当我将存储过程添加到数据库并更新* .edmx文件时,它会看到我添加的存储过程;但是,我以前用不同的项目做了以下事情:

var db = new MyMarinaEntities();
db.prBoatInsert(registrationNumber, manufacturer, modelYear, length, customerID);

但是,当我键入“db”时。 intellisense没有看到插入存储过程。此外,当我在InlandMarinaEntities.Designer.cs文件中搜索时,它没有任何

public int prBoatUpdate(Nullable<global::System.Int32> boatID, global::System.String registrationNumber, global::System.String manufacturer, Nullable<global::System.Int32> modelYear, Nullable<global::System.Int32> length, Nullable<global::System.Int32> customerID) 

功能。有没有人知道为什么它没有将prBoatUpdate添加到* .Designer.cs文件中?

或者,据我所知,MEF可以为每个表生成插入,更新和删除操作;但是,当我生成* .edmx文件时,我没有看到添加任何这些操作,并且在通过向导生成* .edmx文件时,我没有看到任何添加它们的选项。我错过了什么?请注意,我使用的是Visual Studio 2010和SQL Server 2008. TIA。

1 个答案:

答案 0 :(得分:0)

请注意,我确定了如何使用MEF自动生成的函数而不是使用存储过程来添加和更新数据库项。以下是从数据库加载对象的方法:

private void LoadBoat(int boatID)
{
    using (var db = new MyMarinaEntities())
    {
        var boat = db.Boats.SingleOrDefault(b => (b.BoatID == boatID));

        this.chkIsRental.Checked = boat.IsRental;
        this.chkInactive.Checked = boat.Inactive;
        this.txtLength.Text = boat.Length;
        this.txtManufacturer = boat.Manufacturer;
        // ...
    }
}

以下是如何保存对船只的更改:

protected void btnSave_click(object sender, EventArgs args)
{
    using (var dm = new MyMarinaEntities())
    {
        MyMarinaEntities boat;

        boat.IsRental = this.chkIsRental.Checked;
        boat.Inactive = this.chkInactive.Checked;
        boat.Length = this.txtLength.Text;
        boat.Manufacturer = this.txtManufacturer;
        // ...
        if (boatID.Value == "") 
            dm.AddObject("Boats", boat);
        dm.SaveChanges();
    }
}

因此,MEF不仅可以避免编写大量用于对象关系映射(ORM)的代码,还可以避免编写存储过程或命令的SQL代码。