2017-07-30 34 views
0

我有一個枚舉異常,而使用實體框架枚舉值傳遞給存儲過程6

public enum Group 
{ 
     Services = 1, 
     Dev = 2, 
     Support = 3 
} 

我使用它在模型

public class Invoice 
{ 
     public int ID { get; set; } 
     public DateTime MyDate { get; set; } 
     public string Name { get; set; } 
     public Group? Group { get; set; } 
} 

現在我使用上述調用存儲過程模型類:

public ... method(Group grp) 
var Details = this.Context.Database.SqlQuery<Invoice>("spname @ID,@MyDate,@Name,@Group, 
...... 
        new SqlParameter("Group", grp), 
        ).ToList(); 

組是int類型在SQL Server中。

我得到一個異常:

錯誤轉換爲nvarchar成int

的情況下,當有在grp參數

我得到的異常值時,空在那裏的參數枚舉應該是可空類型..但我已經讓它,我Group?

sto紅色程序本身在使用執行命令的數據庫中正常工作。

+1

此處缺少某些內容;您聲明使用null時發生異常,但是您發佈的代碼在方法簽名中具有'int grp',其中sp調用爲int且不能爲null –

+0

什麼是SP中組的參數類型? – MKR

+0

@CaiusJard道歉將更新 –

回答

0

嘗試

SqlParameter sqp = null; 
if(grp.HasValue) 
    sqp=new SqlParameter("Group", grp.Value) 
else 
    sqp=new SqlParameter("Group", DBNull.Value) 
... 

然後在您的通話使用SQP查詢

爲什麼這種複雜性?那麼..你的grp是類型組?因此可以爲空,但是沒有將其轉換爲int(不可爲空)或null(空)的好的單行方式

+0

上面的代碼會編譯嗎?我懷疑。 – MKR

+0

謝謝工作正常 –

0

變化

new SqlParameter("Group", grp) 

if(grp.HasValue) 
    { 
     new SqlParameter("Group", Convert.ToInt32(grp.Value)); 
    } 
    else 
    { 
    new SqlParameter("Group", DBNull.Value); 
    } 

應該工作。

+0

如果grp沒有值,會導致什麼樣的null int? –

+0

我剛剛舉了一個關於如何將枚舉轉換爲int的快速示例。顯然應該添加空值的處理。 – MKR

+1

這個部分說「我應該工作」,我認爲例外.. –

相關問題