簡體   English   中英

將實體框架與存儲過程混合-連接問題

[英]Mixing Entity Framework with Stored Procedures - Connection Issue

我正在使用Code First Entity Framework進行所有數據庫檢索。 不幸的是,在我工作的地方,他們要求必須使用存儲過程來完成所有更新/插入/刪除操作。

我首先執行以下操作:

public partial class MyContext
{
    public void AddStatus(int id, string status)
    {
        var connection = (SqlConnection)this.Database.Connection;

        if( connection.State != ConnectionState.Open )
            connection.Open();

        SqlCommand cmd = connection.CreateCommand();
        // ...

        cmd.ExecuteNonQuery();
    }
}

這工作了一段時間,直到遇到一種情況,我需要在此代碼之后使用相同的上下文直接從數據庫中檢索數據:

MyContext db = new MyContext();

db.AddStatus(1, "Open");

var item = db.Items.Find(1);

我收到以下錯誤:

ArgumentException - EntityConnection can only be constructed with a closed DbConnection.

有什么辦法可以混合這樣的代碼,還是必須創建與數據庫的另一個連接? 如果我需要事務范圍,那么在創建新的連接(例如分布式事務)時會遇到問題嗎?

看來您的AddStatus方法沒有關閉連接,這似乎是EF抱怨的問題。

就是說,您可能還會考慮使用Database.ExecuteSqlCommand執行存儲過程。 傳遞參數的語法略有不同(按照此答案 ):

var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM