如何在ADO.NET實體框架中運行存儲過程?

.net c# entity-framework linq-to-sql

如何在ADO.NET Entity Framework中使用存儲過程?

我的表:MyCustomer

Columns:
CustomerID    PK   int 
Name               nvarchar(50)
SurName            nvarchar(50)

我的存儲過程

ALTER procedure [dbo].[proc_MyCustomerAdd]
(@Name nvarchar(50),
@SurName nvarchar(50)
)
as 
begin
  insert into dbo.MyCustomer([Name], SurName) values(@name,@surname)
end

我的C#代碼

private void btnSave_Click(object sender, EventArgs e)
{
   entityContext.MyCustomerAdd(textName.Text.Trim(), textSurName.Text.Trim());
   entityContext.SaveChanges();
}

錯誤:

數據讀取器與指定的“TestAdonetEntity2Model.MyCustomer”不兼容。類型為“CustomerID”的成員在數據讀取器中沒有具有相同名稱的相應列。

在最後一個代碼行下面發生錯誤(調用ExecuteFunction):

global::System.Data.Objects.ObjectParameter surNameParameter;
if ((surName != null))
{
   surNameParameter = new global::System.Data.Objects.ObjectParameter("SurName", surName);
}
else
{
   surNameParameter = new global::System.Data.Objects.ObjectParameter("SurName", typeof(string));
}
<b>return base.ExecuteFunction<MyCustomer>("MyCustomerAdd", nameParameter, surNameParameter);</b>

添加就可以了。每個添加的過程都可以。但編輯後,會出現上述錯誤。

一般承認的答案

我認為您需要使用EF工具進行功能導入並調用導入的函數

DataContext.MyFunctionName(storedProcedureParamer1, storedProcedureParamer2)

如何:導入存儲過程


熱門答案

要為查詢操作調用存儲過程,可以在Entityframework中使用SqlQuery,這非常有用

_dbContext.Database.SqlQuery<EntityType>("sp_name",parameters).ToList();

對於Executenonquery Operations(Transactions),您可以使用

_dbContext.Database.ExecuteSqlCommand( 
                    @"UPDATE tblname SET Rating = 5" + 
                        " WHERE Name LIKE '%Entity Framework%'" 
                    );

請注意,Context類的_dbContext對象繼承自Entityframework的DbContext類



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因