是否有"优雅"的方式给特定属性一个默认值?
也许通过DataAnnotations,类似于:
[DefaultValue("true")]
public bool Active { get; set; }
Run Code Online (Sandbox Code Playgroud)
谢谢.
是否可以使用数据注释为int属性添加默认值
就像是
[DefaultValue=1]
public int MyId {get; set;}
Run Code Online (Sandbox Code Playgroud) 在旧版应用程序中,大多数字符串属性不能为null,并且需要具有默认值string.empty.
我知道可以通过迁移执行此操作,但我正在寻找使用流畅配置界面执行此操作的方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties<string>().Configure(c =>
{
c.HasMaxLength(255);
if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false))
{
c.IsRequired();
// I want to set a default value (string.empty) here.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,或者我注定要初始化实体构造函数中的所有字符串?
我有一个看起来像这样的课程:
[Table("Subscribers", Schema = "gligoran")]
public class Subscriber
{
[Key]
public string Email { get; set; }
[Required]
[DefaultValue(true)]
public bool Enabled { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
创建迁移以包含此类时,我得到:
public partial class AddSubscriberClass : DbMigration
{
public override void Up()
{
CreateTable(
"gligoran.Subscribers",
c => new
{
Email = c.String(nullable: false, maxLength: 128),
Enabled = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.Email);
}
public override void Down()
{
DropTable("gligoran.Subscribers");
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这Enabled条线看起来像这样:
Enabled = c.Boolean(nullable: false, defaultValue: true),
Run Code Online (Sandbox Code Playgroud)
当然我可以自己做,但我只想问是否有办法让Entity Framework自动完成. …
假设我的数据库中有下表:
CREATE TABLE [dbo].[Test]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Active] BIT DEFAULT ((1)) NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)
从此数据库创建 EF 模型时,映射到列的Active 位列的映射Boolean没有默认值(请参阅属性“默认值”):

为什么实体框架会这样?为什么在创建模型时不会自动将数据库中定义的默认值应用到模型中?DB 声明默认值应该是1,我假设它true是模型中的默认值。我真的必须再次为模型中的所有列设置默认值吗?
我检查了int和bit列的这种行为。
我做了更多调查,并尝试手动将“默认值”属性设置为True和true,并且两者都有效。
测试实体的自动生成的构造函数从
public Test()
{
}
Run Code Online (Sandbox Code Playgroud)
到
public Test()
{
this.Active = true;
}
Run Code Online (Sandbox Code Playgroud)
所以默认值在 EF 中是可能的,但是在基于数据库优先生成模型时没有设置它们,至少在我的机器上没有。
所以,问题仍然存在:我是否真的必须再次为模型中的所有列设置默认值,即使它们已经在数据库中设置?
c# sql-server entity-framework ef-database-first entity-framework-6