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

C# 首先使用ASP.net EF 5代码创建表时,是否可以为列设置默认值?,c#,asp.net,sql-server,asp.net-mvc,entity-framework,C#,Asp.net,Sql Server,Asp.net Mvc,Entity Framework,我正在使用EF 5代码优先实践创建数据库,不知道如何在列上设置默认值(约束) 如果你看我下面的代码;每当添加新用户时,我需要将IsAdmin列默认为0/false。目前我正在做的是首先使用代码创建数据库。然后打开SQLServerManagementStudio,进入表的设计模式,并为IsAdmin列输入默认值(0) 这可以从实体框架中完成吗 这是我得到的 //Create CODE FIRST Database Tables. public class MyDB : DbContext {

我正在使用EF 5代码优先实践创建数据库,不知道如何在列上设置默认值(约束)

如果你看我下面的代码;每当添加新用户时,我需要将IsAdmin列默认为0/false。目前我正在做的是首先使用代码创建数据库。然后打开SQLServerManagementStudio,进入表的设计模式,并为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; }
}
//创建代码优先的数据库表。
公共类MyDB:DbContext
{
公共数据库集用户{get;set;}
}
//SQL Server中的用户表
公共类用户
{
[关键]
public int UserID{get;set;}
[必填,第列(TypeName=“varchar”)]
公共字符串用户名{get;set;}
[必填,第列(TypeName=“varchar”)]
公共字符串密码{get;set;}
[必需]
公共bool IsAdmin{get;set;}
}

我认为您只需添加

[DatabaseGenerated(DatabaseGenerationOption.Computed)]      
public DateTime DateCreated { get; set; }
或者在地图上

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            modelBuilder.Entity<User>()
                    .Property(p => p.CreatedDate )
                    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(p=>p.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
}
除这些数据注释外,据我所知,没有实现任何功能,但您应该能够手动更新表。。。我发现

受保护的无效应用程序\u Start()
{
SetInitializer(新的MyDatabaseInitializer());
}
公共类MyDatabaseInitializer:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(DbContext上下文)
{
上下文数据库
.ExecuteSqlCommand(string.Format(“ALTER TABLE{0}为[{2}]添加默认值({1})”,“Users”,“getdate(),“CreatedDate”);
}
}

您可以在构造函数中设置IsAdmin,使其在代码中默认为0。无论如何,不能将其留给数据库在插入期间进行设置。默认情况下,布尔值为false。由于该列不可为null,因此在不更改该列时,该列在数据库中始终为0。谢谢。我使用context.Database.ExecuteSqlCommand()方法来解决我的问题。
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"));
     }
}