MVC上下文SaveChanges覆盖数据库表

时间:2017-02-05 02:41:29

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

所以我开始学习如何使用项目模板在MVC中使用Entity Framework,我遇到了一个问题。在我的HomeController中,我编写了下面的方法GenerateContractorCustomer,当调用它时,似乎用我创建的新模型覆盖数据库中的默认ASPNetUser表。

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时它不会删除聋人的ASPNetUser表?

1 个答案:

答案 0 :(得分:0)

如果您的模型类(实体类)已更改,那么您正在使用初始化程序来删除现有数据库并创建新数据库。因此,当模型类发生更改时,您不必担心维护数据库架构。要更改数据库initialization strategy,可以在Context类中使用Database类设置DB Initializer,如下所示:

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

如果您提供空值,则turn off此功能。如果您需要其他配置方法,请参阅提供的链接。