2016-07-22 75 views
0

我有一個EF Code First和MSSQL用戶定義函數有趣的問題。 我寫了一個數據庫函數,它返回一個標量值,我想將該函數映射到我的DbContext。實體框架代碼第一個函數

基於信息,我發現我寫這個:

[DbFunction("AppDbContext", "GetNextDocumentNumber")] 
public virtual int GetNextDocumentNumber() 
{ 
    return ((IObjectContextAdapter)this) 
     .ObjectContext 
     .ExecuteStoreCommand("GetNextDocumentNumber"); 
} 

我也寫一個簡單的單元測試,以檢查是否函數返回正確的值。 問題是,上面的代碼返回-1。當我在SMSS上執行功能時,我會得到正確的結果。

在不同的網站上進行搜索後,我找到了解決辦法thatlooks這樣的:

public virtual int GetNextDocumentNumber() 
{ 
    return this.Database 
     .SqlQuery<int>("select dbo.GetNextDocumentNumber()") 
     .Single(); 
} 

在這種情況下,我得到正確的值。

我只想知道以前的代碼有什麼問題,或者我做錯了什麼。在這兩種情況下,我都會獲得價值。但只有在一種情況下,值纔是正確的。

回答

0

This可能會提供您需要的答案。

+0

謝謝!在LINQ表達式中調用函數解決了我的問題。 – TomAsh