2017-05-15 5 views
0

私はEntity Frameworkの初心者です。私は簡単な疑いがあると思うが、私は他のポストでその答えを見つけていない。永続オブジェクト - エンティティフレームワーク

私が持っている:私は、データベース内のオブジェクトA_Bを作成するには、エンティティフレームワークを頼むとき

public class A_B 
{ 
    private int Id; 
    private string name; 

    private A a; 
    private B b; 
} 

public class A 
{ 
    private int Id; 
    private string name; 
} 

public class B 
{ 
    private int Id; 
    private string name; 
} 

、エンティティフレームワークは、あまりにもデータベースにA_B、AとBを作成します。私はオブジェクトAとBをデータベースに作成したくありません。 AとBはすでにデータベースに入っています。 A_Bだけを保存したい。

データベースにA_Bを作成するためのコマンドは次のとおりです。あなたの助けのための

context.Entry(A_B).State = EntityState.Modified; 

または

context.Entry(A_B).State = EntityState.Added; 
DbContext.SaveChanges(); 

ありがとう!

答えて

0

エンティティフレームワークはコンテキスト上でトラッキングされていないため、既存のオブジェクトを作成しているため、コンテキストはデータベース上のエンティティを作成しています。

現在のコンテキストにアタッチしてdbを作成しないようにするには、AとBの状態をModifiedに変更するオブジェクトを追跡する必要があります。

+0

私のコードでどうすればいいですか?例がありますか? –

+0

すでにA_Bの状態を変更しています。同じ方法: context.Entry(A).State = EntityState.Modified; context.Entry(B).State = EntityState.Modified; SaveChangesメソッドの前の状態を変更します。 –

+0

ありがとうDaniel、 しかし、AとBを変更する必要はありません。他の方法はありますか? –

0

既にビルドされているか部分的にビルドされている場合は、データベースに基づいてコードをビルドできます。 Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.SqlServer(SQL Serverを使用していることを前提とする)、およびMicrosoft.EntityFrameworkCore.Toolsのナゲットパッケージを追加します。次に、以下のようなコマンドを実行してコードを自動的に生成することができます。

Scaffold-DbContext "Server=[servername];Database=[databasename];Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Test 

詳細については、thisを参照してください。

+0

OKティム。ありがとう! –

関連する問題