2

最初に Entity Framework コードを使用しています。

同じテーブルに 2 つの外部キーを配置しようとしましたが、許可されていません。

そのようなものです(編集):

テーブルの名前は次のとおりですAvaliacao

[Required]
public int AvaliacaoId { get; set; }


[Required]
public int LivroId { get; set; }
public int? AutorId { get; set; } 

public virtual Livro Livro { get; set; }
public virtual Autor Autor { get; set; }

AutorId 私はヌルになりたくありませんでしたが、そのようにしか機能しません。

null 非許容の FK を 2 つ持つことができたらいいのにと思いますが、 は 1 つだけDelete on Cascadeです。

Entity Frameworkコードファーストでこれを達成するにはどうすればよいですか?

誰か助けてください

thx事前に

ゼカリオカ

4

2 に答える 2

1

編集:

私はこれをテストしていませんが、EF5 を使用している場合は、DbContext で OnModelCreating メソッドをオーバーライドして使用できます。同じエンティティを複数回呼び出して構成を追加できるため、2 番目の外部キーを指定し、その HasRequired プロパティを設定して、その WillCascadeOnDelete プロパティを true に設定できます。

最初の外部キーはこのようなものです。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Avaliacao>()
                .HasRequired(a => a.LivroId)
                .HasForeignKey(m => a.LivroId)
                .WillCascadeOnDelete(false);

    modelBuilder.Entity<Avaliacao>()
                .HasRequired(a => a.AutorId)
                .HasForeignKey(m => a.AutorId)
                .WillCascadeOnDelete(false);

}

メソッドの詳細については、MSDN ドキュメント: DbModelBuilderを参照してください。

前述のように、私はこれを自分でテストしていないため、一部のプロパティを変更する必要がある場合があります。

それが役に立てば幸い

于 2013-01-30T22:27:50.437 に答える
0

これは、FluentAPIを介して実行できます。次に例を示します。

modelBuilder.Entity<MyEntity>().HasRequired(t => t.Livro);
modelBuilder.Entity<MyEntity>().HasRequired(t => t.Autor);
于 2013-01-30T23:21:33.427 に答える