如何在Code First中为属性设置默认值?

时间:2013-05-26 17:55:23

标签: asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-4

基本上我正在尝试扩展已经创建的ASP.NET MVC 4的SimpleMembership。 我想添加一个初始值为0的余额字段。

我尝试使用以下代码并在Balance字段中不插入任何内容:

    [Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string RealName { get; set; }
    public int Balance { get; set; }
}

但不幸的是,当我尝试创建一个新用户(没有余额)时,我得到一个异常,因为它不允许空值,所以我无法在余额中插入null。 如何在Code First中将余额设为0作为默认值。

3 个答案:

答案 0 :(得分:0)

  int Balance

不允许空值,但

  int? Balance

确实

如果要在数据库级别控制结构,请使用显式迁移并手动调整生成的迁移代码,以便在数据库级别设置默认值。如果您想在代码级别使用默认值,只需在类的默认构造函数中设置该值。

答案 1 :(得分:0)

首先:你可以使用这样的构造函数:

[Table("UserProfile")]
public class UserProfile
{
  [Key]
  [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
  public int UserId { get; set; }
  public string UserName { get; set; }
  public string RealName { get; set; }
  public int Balance { get; set; }

  public UserProfile()
  {
     this.Balance = 0;
  }
}

其次,清理并重建解决方案,然后使用迁移命令

Update-database -verbose

答案 2 :(得分:0)

默认情况下,整数的默认值为0。实例化新的UserProfile时,Balance应该已经设置为0。

请参阅:Default Values Table (C# Reference)