C# MVC上下文保存更改覆盖数据库表

C# MVC上下文保存更改覆盖数据库表,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,因此,我开始学习如何使用项目模板在MVC中使用实体框架,我遇到了一个问题。在我的HomeController中,我编写了下面的方法GenerateContractorCustomer,调用该方法时,它似乎会用我创建的新模型覆盖数据库中的默认ASPNetUser表 public void GenerateContractorCustomer() { using (var context = new ContractorCustomerContext()) { ContractorM

因此,我开始学习如何使用项目模板在MVC中使用实体框架,我遇到了一个问题。在我的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; }
公共类ContractorCustomerContext:DbContext
{
public ContractorCustomerContext():base(“DefaultConnection”){}
公共数据库集承包商{get;set;}
公共数据库集客户{get;set;}
在IdentityModel中有默认值:

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

public static ApplicationDbContext Create()
{
  return new ApplicationDbContext();
}
}
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序上下文()
:base(“DefaultConnection”,throwifvv1schema:false)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}

我的问题是,我需要对我的代码做些什么,以便在调用GenerateContactorCustomer时,它不会删除Deafolt ASPNetUser表?

如果您的模型类(实体类)为已更改。因此,当模型类更改时,您不必担心维护数据库架构。要更改数据库,可以使用上下文类中的数据库类设置数据库初始值设定项,如下所示:

public class ExampleDBContext: DbContext 
{        
  public ExampleDBContext(): base("AConnectionString") 
  {
    Database.SetInitializer<ExampleDBContext>(new CreateDatabaseIfNotExists<ExampleDBContext>());
  }
}
public类示例DbContext:DbContext
{        
public exampledContext():base(“AConnectionString”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
}

如果提供空值,则可以使用此功能。如果需要其他配置方法,请参阅提供的链接。

如果模型类(实体类)为空,则使用初始值设定项删除现有数据库并创建新数据库已更改。因此,当模型类更改时,您不必担心维护数据库架构。要更改数据库,可以使用上下文类中的数据库类设置数据库初始值设定项,如下所示:

public class ExampleDBContext: DbContext 
{        
  public ExampleDBContext(): base("AConnectionString") 
  {
    Database.SetInitializer<ExampleDBContext>(new CreateDatabaseIfNotExists<ExampleDBContext>());
  }
}
public类示例DbContext:DbContext
{        
public exampledContext():base(“AConnectionString”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
}

如果提供空值,则可以使用此功能。如果需要其他配置方法,请参阅提供的链接。

您说它“覆盖”了表,但随后说它“删除”表。请更准确地说明实际发生的情况。我注意到,您发布的代码中没有任何内容看起来会改变数据库架构。您没有发布的代码中也有其他内容。@Dai在查看数据库表时,在调用我的方法表conta之前,我说了覆盖和删除在所有的ASPNetUser表中,但调用后它们都消失了,并且创建了Contractor表和Customer表。@Dai另外,关于DB模式,我不确定我需要做什么,因为我刚刚遵循了以下指南:@AnsonWen这些ASPNetUser表是在数据库中手动创建的还是使用EF迁移的?你说它“覆盖”表,但你说它“删除”表。请更准确地说明实际发生的情况。我注意到,您发布的代码中没有任何内容看起来会改变数据库架构。您没有发布的代码中也有其他内容。@Dai在查看数据库表时,在调用我的方法表conta之前,我说了覆盖和删除在所有的ASPNetUser表中,但在调用之后,它们就消失了,并且创建了Contractor表和Customer表。@Dai另外,关于DB模式,我不确定我需要做什么,因为我只是按照以下指南:@AnsonWen这些ASPNetUser表是在数据库中手动创建的还是使用EF迁移的?