實體框架存儲過程不可用

c# entity-framework stored-procedures

我在edmx文件中添加了對存儲過程的引用,然後右鍵單擊它並選擇“Create Function Import”,它被添加到模型瀏覽器中EntityContainer下的Function Imports文件夾中。

據我了解,我應該可以像這樣使用它:

sampleEntities db = new sampleEntities();
db.SampleStoredProcedure();

但它沒有顯示在db對像上。我缺少一步嗎?函數導入設置為public,沒有返回值,以及我在展開它時可以看到的一個參數。

一般承認的答案

您的存儲過程是否返回一個簡單的(也就是標量 )值?如果是這樣,設計人員將不會為您生成代碼

如果將“返回類型”設置為簡單類型,則不會自動為“函數導入”生成Visual Basic或C#。

但是,這已在最新版本的實體框架中修復:

您可以像以前一樣選擇None和Scalar返回類型。但是,當創建“功能導入”時,會將一些新代碼注入到模型代碼後面的文件中,該代碼將存儲過程實現為ObjectContext本身的操作。


熱門答案

您可以使用EntityCommand類執行存儲過程,向實體數據模型添加新的存儲過程,然後將其作為函數添加並命名,然後執行存儲過程:

public bool ExecuteCMD(string Command) 
{
    using (var entities = new DbEntities())
    {
        var conn = new System.Data.EntityClient.EntityConnection(entities.Connection.ConnectionString);
        try
        {
            conn.Open();
            using (EntityCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "DbEntities." + Command;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
            }
            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }
    }
}


Related

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