【问题标题】:Entity framework CREATEs against SQL Server DB nonnullable columns实体框架针对 SQL Server DB 不可为空的列创建
【发布时间】:2010-12-27 17:36:34
【问题描述】:

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

因此,虽然空字符串的默认值在 SQL Server Management Studio 中有效(如果我将列 emtpy 保留为自动插入 emtpy 字符串),但在 EF 中无效。

我必须说,我之前在 uniqueidentifier 主键列中确实注意到了这一点,但现在我看到无论列是什么,都没有关于列默认值的信息将其纳入 EF 模型。

还有人注意到这个吗?任何解决方法?

另外,如果有人知道的话,最新的 EF Feature CTP 是否对此有任何改进?

【问题讨论】:

    标签: sql-server entity-framework


    【解决方案1】:

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

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

    【讨论】:

    • 我猜可能是这样。只切换回允许 DB 中的空值是否有意义?因为在我看来,初始化实体的所有值是一件很痛苦的事情——有些实体有几十个字符串字段..
    • @Mare - 我会说不。但这主要是因为我试图在我们的数据库中尽可能地避免可以为空的列。您应该能够编写一个有效的例程来检查实体中的每个属性,如果数据类型是字符串,则将 null 替换为 String.Empty。我认为我们会这样做。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2010-10-05
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多