是否可以在先使用 EF 5 代码创建表时为列设置默认值 ASP.net

本文关键字:设置 net ASP 默认值 创建 代码 EF 是否 | 更新日期: 2023-09-27 18:34:01

我正在使用EF 5代码优先实践创建数据库,但无法弄清楚如何在列上设置默认值(约束)。

如果你看看下面的代码;每当添加新用户时,我需要 IsAdmin 列默认为 0/false。目前,我正在做的是首先使用代码创建数据库。然后打开 sql Server Management Studio 并转到表的设计模式,并为 IsAdmin 列输入默认值 (0)。

这可以从实体框架完成吗?

这就是我得到的。

//Create CODE FIRST Database Tables.
public class MyDB : DbContext
{
    public DbSet<Users> Users { get; set; }
}
//Users Table in SQL Server
public class Users
{
    [Key]
    public int UserID { get; set; }
    [Required, Column(TypeName = "varchar")]
    public string UserName { get; set; }
    [Required, Column(TypeName = "varchar")]
    public string Password { get; set; }      
    [Required]
    public bool IsAdmin { get; set; }
}

是否可以在先使用 EF 5 代码创建表时为列设置默认值 ASP.net

我认为你只需要添加

[DatabaseGenerated(DatabaseGenerationOption.Computed)]      
public DateTime DateCreated { get; set; }

或在映射中

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            modelBuilder.Entity<User>()
                    .Property(p => p.CreatedDate )
                    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    }

除了这些数据注释之外,据我所知,没有实现任何功能,但您应该能够手动更新表格......我在这里找到了这个例子:

protected void Application_Start()
{
    Database.SetInitializer(new MyDatabaseInitializer());
}
public class MyDatabaseInitializer : DropCreateDatabaseIfModelChanges<DbContext>
{
     protected override void Seed(DbContext context)
     {
        context.Database
             .ExecuteSqlCommand(string.Format("ALTER TABLE {0} ADD DEFAULT ({1}) FOR [{2}]", "Users", "getdate()", "CreatedDate"));
     }
}