EF 5.0将null插入smallint列

时间:2012-12-01 19:23:08

标签: c# entity-framework-5 asp.net-4.5

我有一个SQL类型为smallint(EF类型为Int16)的列,我想插入一个空值但是当我使用下面的代码时,我得到的错误是null无法转换为short。如果允许我插入null的语句,我怎么能得到这一行呢?

CollectionID = (ddlCollection.SelectedValue == "None") ? null  : Convert.ToInt16(ddlCollection.SelectedValue)

4 个答案:

答案 0 :(得分:2)

工作代码是执行nullablecnvert,如:

CollectionID = (ddlCollection.SelectedValue == "None") ? (Nullable<Int16>)null : Convert.ToInt16(ddlCollection.SelectedValue)

答案 1 :(得分:1)

c#在数据库中的值为null:     DBNull.Value

答案 2 :(得分:0)

第一个问题是,如果您使用的是Code,则必须将您的Entity Framework属性CollectionID标记为Nullable(如果您使用的是EDMX)或声明为short?Nullable<short>第一

其次,您需要确保该列的数据库类型也标记为可为空(类似于SQL Server中的smallint NULL)。

编辑:啊,我想我现在看到了问题。尝试将您的来电转为Convert.ToInt16Nullable<short>。三元运算符在null侧看到true,并且类型与null一侧的false值不兼容,这会导致您的错误。

CollectionID = (ddlCollection.SelectedValue == "None")
    ? (Nullable<short>)null 
    : (Nullable<short>)Convert.ToInt16(ddlCollection.SelectedValue)

答案 3 :(得分:0)

将它与sqlcommand参数一起使用

 if(ddl_collection.selectedvalue!="None")
   command.Parameters.AddWithValue("@CollectionID", Convert.ToInt16(ddlcollection.selectedValue));
else
    command.Parameters.AddWithValue("@CollectionID", DBNull.Value);