【问题标题】:Insert default value via EntityFramework通过 EntityFramework 插入默认值
【发布时间】:2012-11-08 21:40:56
【问题描述】:

我在数据库中的标题字段上有默认约束。在 Web 应用程序中,如果标题为空 NULL 值传递给数据库并且数据库返回异常,因为 samo 字段不能为空(Caption varchar(50) NOT NULL)。

那么,如果确实没有提供值,那么设置某个值(“” - 空字符串)或避免将 NULL 发送到数据库的最简单方法是什么。如何在 EntityFrameowrk 或数据访问层中设置它...?

【问题讨论】:

    标签: c# .net sql-server asp.net-mvc entity-framework


    【解决方案1】:

    在新实体创建后立即使用空字符串定义属性。例如,在构造函数中。 Example

    在更新现有实体之前,您可以检查属性是否为空:

    entity.StringProperty = entity.StringProperty ?? String.Empty;
    _db.SaveChanges();
    

    【讨论】:

      【解决方案2】:

      在我的系统 MVC4 实体框架 5.0 上,我使用的是这样的,(DataAnnotation)

      [DefaultValue = DateTime.Now]
      

      公共日期时间 MyDateTime { get;放; }

      }

      或者像其他类型一样...string.Empty

      【讨论】:

        【解决方案3】:

        这似乎是一个只有你会知道的问题。空值代表业务逻辑,由您自己弄清楚。

        是否应该更改数据库以允许空值,因为它在那里有意义?

        应用程序应该在数据库中保存“-1”,因为这有一些意义,还是应该保存“”?

        如果该值为空,应用程序是否应该根本不提交该字段?

        允许应用程序提交包含不相关数据的字段是否会影响该数据的未来价值?

        根据我的经验,当 null 表示不存在关系或值时,我允许将值作为 NULL 放置在数据库中。当该值不存在时,这意味着应该或将要发生的动作尚未发生。不过这只是针对我自己,因为大多数人都是根据具体情况来实现业务逻辑的。

        【讨论】:

        • 数据库不允许插入 NULL 值。
        • @user1810618 - 您可以更改该字段以允许 NULL。
        • 我不能这样做,因为我无权更改数据库架构。
        • @user1810618 - 然后将该字段标记为[Required],或者在构造函数内部提供""的默认值,或者在提交数据时,确保该值至少为"" .这实际上取决于空值在该位置的含义。用户名可能不应该是“”,而昵称是否是“”可能无关紧要(假设昵称不是唯一的关联)。
        【解决方案4】:

        在实体中,你可以在创建时初始化你的对象吗?我知道你可以在 Linq 中做到这一点。您是否能够进入实体对象的代码并在创建时将相关属性设置为默认值?

        【讨论】:

          【解决方案5】:

          在构造函数中设置它。

          partial class MyEntityName {
              public MyEntityName() {
                  this.Caption = "";
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-14
            • 1970-01-01
            • 2011-07-20
            • 1970-01-01
            • 2015-05-24
            • 1970-01-01
            • 1970-01-01
            • 2017-12-19
            相关资源
            最近更新 更多