2013-04-16 15 views
5

Mam następujące obiekty domeny:EF 5,0 Wielokrotność Błąd na prostych mapowania

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;} 
    ... 
} 

Kiedy mapowanie Osoba, wszystkie te właściwości są odwzorowane prawie taki sam sposób:

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

Problemem jest to, , z BirthCountry otrzymuję następujący błąd podczas próby zapytania Osoba:

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'. 

Jeśli usuniemy B irthCountry Właściwość (i mapowanie) wszystko działa dobrze. To, co jest mylące, polega na tym, że BirthCountry jest ustawiona tak samo, jak każda inna noblowna właściwość w Osobie. Dlaczego inne właściwości nie dają mi tego samego błędu?

Dzięki za pomoc, jaką możesz zaoferować!

Odpowiedz

11

Niewiedza to nie błogość ... to po prostu frustrujące.

W końcu zdałem sobie sprawę, że mam atrybut [Wymagany] na BirthCountryId. To było przyczyną problemu ... który ma całkowicie sens. Nie mogę powiedzieć EF, że jest to opcjonalne i wymagane w tym samym czasie.

Mam nadzieję, że to uratuje kogoś od tej samej frustracji, przez którą przeszedłem.

+0

Wciąż szukam sposobu dodania atrybutu [Wymagany] do gry ForeignKeyField. Czy masz odpowiedź na naprawienie tego błędu? – MasterLuV

+0

W rzeczywistości mój błąd był ** z ** atrybutu '[Wymagany]'. Usunięcie atrybutu rozwiązało mój problem. Problem polega na tym, że nie można zadeklarować go jako wartości null (co oznacza, że ​​jest on zerowy, a zatem nie jest wymagany) i dodać atrybut informujący EF, że jest on wymagany. Jeśli jest to wymagane, nie powinieneś deklarować, że jest to int innulacyjny. – RHarris

+0

Wiem, że usuń atrybut [Wymagany], wtedy wszystko działa poprawnie. Ale w rzeczywistości ciąg znaków jest wartością zerową, nie mogą one mieć wartości NULL w EF z atrybutem [Wymagany]. I możemy uzyskać ErrorMessage, gdy są puste lub puste – MasterLuV

Powiązane problemy