实体框架针对SQL Server DB不可为空的列进行CREATE

时间:2010-12-27 17:36:35

标签: sql-server entity-framework

我正在为我的ORM使用EFv4,我只是尝试将一条记录插入到一​​个表中,该表有多个标记为不可为空的列,并且默认值为空字符串(对于nvarchar类型列)。问题是EF没有为此列选择默认值,当我创建我的实体的实例但保留一些字符串属性null然后尝试将其保存在DB表中时发生异常(说我应该放松我对数据集的约束设置)。

因此,虽然空字符串的默认值在SQL Server Management Studio中工作(如果我保留列emtpy,它将自动插入emtpy字符串),但它在EF中不起作用。

我必须说我之前在使用uniqueidentifier主键列之前注意到了这一点,但现在我发现无论列是什么,没有关于列默认值的信息都会进入EF模型。

有人注意到这个吗?任何变通方法?

此外,如果有人知道,在最新的EF功能CTP中是否有任何改进?

2 个答案:

答案 0 :(得分:3)

我不会将此视为EF问题。 L2S做同样的事情。 '问题'是当你在表中插入一行时,EF / L2S实际上在Insert语句中包含了一个NULL值的列。当像这样完成插入时,不使用默认值。

您可能必须执行我们在DAL中所做的事情,即在执行插入之前用默认值替换空值。

答案 1 :(得分:0)

我发现在Management Studio中创建表时分配的默认值在我执行“从数据库创建模型”时不会进入EF模型,但是如果在SQL中设置默认值服务器,然后还设置EF模型中的默认值,然后当我创建对象时,它们带有在对象中设置的那些默认值....你试过吗?

编辑:对于字符串,您需要直接编辑EDMX文件:

<Property Type="String" Name="Listing" MaxLength="Max" FixedLength="false" Unicode="false" DefaultValue="" />