1

ユーザーとフィードバックの 2 つのエンティティがあり、ユーザー名フィールドの助けを借りて、それらの間に 1 対多の関係があります。

Feedback --> User 
--------   --------
username   username

ただし、フィードバックが未登録のユーザーからコード化される場合があり、フィードバックのユーザー名フィールドは Null になります。その場合、外部キー制約により、フィードバックの追加は失敗します。

宣言的に、または Fluent API を使用して、リレーションシップに対する外部キー制約の適用を無効にするにはどうすればよいですか? DB の作成時にデフォルトで有効になっています。

ありがとうございました!

4

1 に答える 1

6

目的のために外部キー制約の強制を無効にする必要はありません。オプションの1 対多の関係と呼ばれる外部キーに NULL 値を許可する必要があるだけです(必要な関係とは対照的に、'外部キーの NULL 値を許可しない)。

このオプションの関係は、次の方法で定義できます。

public class Feedback
{
    public int Id { get; set; }

    [ForeignKey("User")]
    public int? UserId { get; set; } 
    public User User { get; set; }
}

int?外部キーにnull 許容型を使用すると、関係がオプションになります。User名前付きの主キー プロパティがある場合は、 Entity Framework が命名規則に基づいてナビゲーション プロパティの外部キーとして検出するため、属性Idを省略することもできます。[ForeignKey]UserIdUser

または、データ注釈の代わりに Fluent API を使用できます。

modelBuilder.Entity<Feedback>()
    .HasOptional(f => f.User)
    .WithMany() // or WithMany(u => u.Feedbacks)
    .HasForeignKey(f => f.UserId);
于 2012-04-25T22:24:20.050 に答える