【发布时间】:2014-07-12 10:50:33
【问题描述】:
是否可以使用数据注解为 int 属性添加默认值
类似
[DefaultValue=1]
public int MyId {get; set;}
【问题讨论】:
-
不行……用构造函数就好了。
标签: c# .net asp.net-mvc
是否可以使用数据注解为 int 属性添加默认值
类似
[DefaultValue=1]
public int MyId {get; set;}
【问题讨论】:
标签: c# .net asp.net-mvc
试试这个 - 在构造函数中设置默认值:
public class YOURMODEL
{
public int MyId { get; set; }
public YOURMODEL()
{
MyId = 1;
}
}
其他用户稍后添加:自 C# 6.0 (2015) 起,允许使用这种更简单的语法:
public class YOURMODEL
{
public int MyId { get; set; } = 1;
}
【讨论】:
使用[DefaultValue(false)]。
【讨论】:
构造方法当然是正确的(根据@Nilesh),但是这个解决方案没有解决您可能已经在数据库中创建的任何遗留数据。
您还可以通过生成迁移然后调整 AddColumn 方法来更新您的旧数据...
AddColumn("dbo.Orgs", "MyId", c => c.Int(nullable: false));
更改为:
AddColumn("dbo.Orgs", "MyId", c => c.Int(nullable: false, defaultValue: 1));
注意,这还将创建一个数据库触发器,该触发器将自动更新 INSERT 上的默认值,因此从技术上讲,从数据库的角度来看,您不需要构造函数方法,但使用构造函数设置值仍然是最佳做法。
【讨论】:
您只能使用类的构造函数来执行此操作。因此,您的代码应如下所示:
public class MyModel
{
public MyModel()
{
MyId = 1;
}
public int MyId {get; set;}
}
这将导致每当创建类的新实例时,MyId 属性被设置为 1。但是,如果模型绑定检测到用户为MyId 指定了一个值,它将用用户指定的值覆盖默认值。
【讨论】:
using System.ComponentModel;
namespace EMS.Models
{
public class Admission
{
[DefaultValue(false)]
public Boolean LCStatus { get; set; }
[DefaultValue("India")]
public string Country{ get; set; }
}
}
【讨论】: