2017-02-05 65 views
1

所以我開始學習如何使用項目模板在MVC中使用實體框架,並且遇到了問題。在我的HomeController中,我編寫了下面的方法GenerateContractorCustomer,它在被調用時似乎用我創建的新模型覆蓋了數據庫中的默認ASPNetUser表。MVC Context SaveChanges覆蓋數據庫表

public void GenerateContractorCustomer() 
{ 
    using (var context = new ContractorCustomerContext()) 
    { 
    ContractorModel contractor = new ContractorModel { ContractorID =1, ContractorName ="John"}; 
    context.Contractor.Add(contractor); 
    context.SaveChanges(); 
    } 
} 

我創建了一個的DbContext:

public class ContractorCustomerContext : DbContext 
{ 
public ContractorCustomerContext() : base("DefaultConnection") { } 
public DbSet<ContractorModel> Contractor { get; set; } 
public DbSet<CustomerModel> Customer { get; set; } 

而在IdentityModel有默認:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
public ApplicationDbContext() 
    : base("DefaultConnection", throwIfV1Schema: false) 
{ 
} 

public static ApplicationDbContext Create() 
{ 
    return new ApplicationDbContext(); 
} 
} 

我的問題是什麼,我需要做的,我的代碼,這樣,當我打電話給GenerateContractorCustomer它不會刪除deafult ASPNetUser表嗎?

+0

你說它「覆蓋」表,但是你說它「刪除」表。請更準確地瞭解實際發生的情況。 – Dai

+0

我注意到,您發佈的代碼中沒有任何內容看起來像它會根本改變數據庫模式。還沒有發佈的代碼中發生了其他事情。 – Dai

+0

@Dai我說覆蓋和刪除,因爲我正在查看數據庫表,並且在調用我的方法之前,表中包含所有ASPNetUser表,但在調用它們後,它們不見了,並創建了Contractor和Customer表。 –

回答

0

如果您的模型類(實體類)已更改,則正在使用初始化程序,該初始化程序將刪除現有數據庫並創建新數據庫。所以當模型類更改時,您不必擔心維護數據庫模式。如果你提供一個空值turn off此功能

public class ExampleDBContext: DbContext 
{   
    public ExampleDBContext(): base("AConnectionString") 
    { 
    Database.SetInitializer<ExampleDBContext>(new CreateDatabaseIfNotExists<ExampleDBContext>()); 
    } 
} 

:要改變一個DB initialization strategy,你可以在上下文中使用類Database類設置DB初始化程序,如下圖所示。如果您需要其他配置方法,請參閱提供的鏈接。

+0

這工作得很好,再次感謝朋友。 –