2013-10-03 40 views
2

我使用EF 5代碼優先實踐創建我的數據庫,並無法弄清楚如何在列上設置默認值(約束)。首次使用ASP.net 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; } 
} 
+0

通過在構造函數中設置IsAdmin,可以使代碼中的IsAdmin默認爲0。無論如何你都不能將它留在數據庫中來設置。 – Colin

+0

默認情況下,布爾值爲false。由於該列不可爲空,因此當您不更改它時,它在數據庫中始終爲0。 –

回答

2

我想你只需要添加

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

或映射

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

其他然後這些數據說明沒有就實現我所知的功能,但你應該可以手動更新表...我發現this example here:

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")); 
    } 
} 
+0

謝謝。我使用context.Database.ExecuteSqlCommand()方法來解決我的問題。 – Maddhacker24

相關問題