2017-02-05 6 views
1

プロジェクトテンプレートを使用してMVCでEntity Frameworkを使用する方法を学び始めましたが、問題が発生しました。私のHomeControllerでは、以下のメソッドGenerateContractorCustomerを作成しました。このメソッドは、作成した新しいモデルでデータベースのデフォルトASPNetUserテーブルを上書きするようです。MVCコンテキスト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を呼び出して、それは嫌な人のASPNetUserテーブルを削除しませんか?

+0

テーブルを上書きすると言いますが、テーブルを「削除」します。実際に何が起こっているのかをより正確にしてください。 – Dai

+0

投稿したコードには、DBスキーマをまったく変更しないようなものはありません。あなたが投稿していないコードで何かが起こっています。 – Dai

+0

@Daiデータベーステーブルを見ていて、メソッドを呼び出す前に、テーブルにすべてのASPNetUserテーブルが含まれていますが、呼び出された後、それらはなくなり、ContractorテーブルとCustomerテーブルが作成されました。 –

答えて

0

モデルクラス(エンティティクラス)が変更されている場合、既存のデータベースを削除して新しいデータベースを作成するイニシャライザを使用しています。したがって、モデルクラスが変更されたときに、データベーススキーマのメンテナンスを心配する必要はありません。下図のようにDB initialization strategyを変更するには、Contextクラスでデータベースクラスを使用してDB初期化子を設定できます

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

あなたはturn offこの機能をnull値を提供する場合。別の構成方法が必要な場合は、提供されているリンクを参照してください。

+0

これは非常にうまくいった、おかげで再び友人。 –

関連する問題