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ć!
Wciąż szukam sposobu dodania atrybutu [Wymagany] do gry ForeignKeyField. Czy masz odpowiedź na naprawienie tego błędu? – MasterLuV
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
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