是否有“优雅”的方式给特定的属性一个默认值?
也许是DataAnnotations,比如:
[DefaultValue("true")]
public bool Active { get; set; }
谢谢你!
是否有“优雅”的方式给特定的属性一个默认值?
也许是DataAnnotations,比如:
[DefaultValue("true")]
public bool Active { get; set; }
谢谢你!
当前回答
嗯…我先做DB,在这种情况下,这实际上要简单得多。EF6对吧?只需打开你的模型,右键单击你想要设置默认值的列,选择属性,你会看到一个“DefaultValue”字段。填好并保存。它将为您设置代码。
你的里程数可能会在代码上有所不同,但我没有使用过这种方法。
许多其他解决方案的问题是,虽然它们最初可能有效,但一旦您重新构建模型,它就会抛出您插入到机器生成文件中的任何自定义代码。
这个方法通过在edmx文件中添加一个额外的属性来工作:
<EntityType Name="Thingy">
<Property Name="Iteration" Type="Int32" Nullable="false" **DefaultValue="1"** />
通过在构造函数中添加必要的代码:
public Thingy()
{
this.Iteration = 1;
其他回答
已经有一段时间了,但给别人留个字条。 我实现了所需要的属性,我装饰我的模型类字段的属性,因为我想要。
[SqlDefaultValue(DefaultValue = "getutcdate()")]
public DateTime CreatedDateUtc { get; set; }
得到了这两篇文章的帮助:
EF在CodePlex Andy Mehalick博客
我做了什么:
定义属性
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class SqlDefaultValueAttribute : Attribute
{
public string DefaultValue { get; set; }
}
在上下文的“OnModelCreating”中
modelBuilder.Conventions.Add( new AttributeToColumnAnnotationConvention<SqlDefaultValueAttribute, string>("SqlDefaultValue", (p, attributes) => attributes.Single().DefaultValue));
在自定义SqlGenerator中
private void SetAnnotatedColumn(ColumnModel col)
{
AnnotationValues values;
if (col.Annotations.TryGetValue("SqlDefaultValue", out values))
{
col.DefaultValueSql = (string)values.NewValue;
}
}
然后在Migration Configuration构造函数中,注册自定义SQL生成器。
SetSqlGenerator("System.Data.SqlClient", new CustomMigrationSqlGenerator());
你可以手动编辑代码第一次迁移:
public override void Up()
{
AddColumn("dbo.Events", "Active", c => c.Boolean(nullable: false, defaultValue: true));
}
假设您有一个名为Products的类名,并且有一个IsActive字段。你只需要一个create构造函数:
Public class Products
{
public Products()
{
IsActive = true;
}
public string Field1 { get; set; }
public string Field2 { get; set; }
public bool IsActive { get; set; }
}
那么您的IsActive默认值为True!
Edite:
如果你想用SQL来执行这个命令:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.IsActive)
.HasDefaultValueSql("true");
}
即使在。net Core 1.0中,当你使用代码优先的方法时,也可以设置默认值。请参阅下面的代码片段。
using System.ComponentModel;
[DefaultValue(true)]
public bool Active { get; set; }
阅读:微软官方文档
我做了什么,我在实体的构造函数中初始化了值
注意:DefaultValue属性不会自动设置属性的值,你必须自己设置