5

次のドメイン オブジェクトがあります。

public class Person 
{
    public int Id {get; set;}
    public int? FatherId {get; set;}
    public int? MotherId {get; set;}
    public int? HomeChurchId {get; set;}
    public int? BirthCountryId {get; set;}

    public Parent Father {get; set;}
    public Parent Mother {get; set;}
    public Church HomeChurch {get; set;}
    public Country BirthCountry {get; set;}
}

public class Parent
{
    public int Id {get; set;}
    ...
}

public class Church
{
    public int Id {get; set;}
    ...
}

public class Country
{
    public int Id {get; set;}
    ...
}

Person をマッピングする場合、これらのプロパティはすべてほぼ同じ方法でマッピングされます。

HasOptional(p => p.Father).WithMany().HasForeignKey(p => p.FatherId);
HasOptional(p => p.BirthCountry).WithMany().HasForeignKey(p => p.BirthCountryId);    
...

問題は、BirthCountry で Person をクエリしようとすると、次のエラーが表示されることです。

One or more validation errors were detected during model generation:

System.Data.Entity.Edm.EdmAssociationType: : Multiplicity conflicts with the
referential constraint in Role 'Person_BirthCountry_Target' in relationship
'Person_BirthCountry'. Because all of the properties in the Dependent Role are 
non-nullable, multiplicity of the Principal Role must be '1'.

BirthCountry プロパティ (およびマッピング) を削除すると、すべて正常に動作します。私が混乱しているのは、BirthCountry が Person の他のすべての null 許容プロパティと同じように設定されていることです。他のプロパティで同じエラーが発生しないのはなぜですか?

あなたが提供できるどんな助けにも感謝します!

4

1 に答える 1

11

無知は至福ではありません...ただイライラするだけです。

BirthCountryId に [Required] 属性があることにようやく気付きました。これが問題を引き起こしていました...これは完全に理にかなっています。私はEFにそれがオプションであると同時に必須であることを伝えることはできません。

これが私が経験したのと同じ欲求不満から他の誰かを救うことを願っています.

于 2013-04-16T15:38:21.640 に答える