2016-04-09 4 views
0

私は以下の2つのクラスを持っています。モデルを変更せずにFluent APIを使用して一対多を宣言するにはどうすればいいですか?

class Donkey 
{ 
    public Guid Id { get; set; } 
} 

class Monkey 
{ 
    public Guid Id { get; set; } 
    public Donkey Donkey { get; set; } 
} 

ここで、データベースにリレーションが設定されるようにスキーマを設定します。 Fluent APIを使用して、私はこのようなものに行きます。

protected override void OnModelCreating(DbModelBuilder model) 
{ 
    base.OnModelCreating(model); 
    model.HasDefaultSchema("dbo"); 
    ... 
    model.Entity<Monkey> 
    .HasRequired(_ => _.Donkey) 
    .WithMany(_ => _.Monkeys) 
    .Map(_ => _.MapKey("DonkeyId")); 
} 

の問題は、今、私はロバでサルのリストを宣言に持ってということです。そして、私はそれをしたくありません。私はまだ私のカスタムカラム名を指定する必要があるので、ロバのテーブルにPKを指しているFKを保存する必要があるので、サルは外部キーを使用してロバを指すようにします。

model.Entity<Monkey>.HasRequired(_ => _.Donkey); 

したがって、上記のマッピングには欠けています(追加するだけでコンパイルされません)。 ドンキークラスの定義を実際に変更せずに回避する方法はありますか?

+2

パラメータなしで別のオーバーロードを呼び出すだけです。 - WithMany() ' – 2kay

+0

@ 2kayそれは簡単ですか?それはお勧めの方法ですか?どんなドラゴンもありますか?どんなヒントもありがとうございます。 –

+0

ドキュメントによると、はい。刺激された状態で使用され、どんなドラゴンも見たことがない) – 2kay

答えて

1
modelBuilder.Entity<Monkey>() 
      .HasRequired(x => x.Donkey) 
      .WithMany(); 
+0

興味深い。私はそのような過負荷があったことを認識しませんでした。さて、カスタム名前付きの列にマップするには、私の質問に示されているように* MapKey *を使用するか、別のメソッドの呼び出しから生じると考えられる他の問題はありますか? –

+0

'.Map(x => x.MapKey(" DonkeyId "));のような別のオーバーロードを追加することもできますし、' 'Monkey'クラスに別のカラムを追加すると' .HasForeignKey(x => x.DonkeyId) ); ' – SteppingRazor

+0

ところで、これはすばらしい答えだったので、あなたはそれを[これと同じように]大きな打撃を与えてくれるだけではありません(http://stackoverflow.com/questions/36521800/how-to-それを必要とするものではないことを宣言してください)。それはおそらくさらに簡単です。 –

関連する問題