2013-04-16 11 views
5

ho i seguenti oggetti di dominio:EF 5.0 Molteplicità On Error semplice mappatura

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

Quando la mappatura persona, tutte queste proprietà sono mappati più o meno allo stesso modo:

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

Il problema è , con BirthCountry ricevo il seguente errore quando provo ad interrogare persona:

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

Se rimuovo la B proprietà irthCountry (e mappatura) tutto funziona bene. Ciò che mi confonde è che BirthCountry è impostato proprio come ogni altra proprietà nullable in Person. Perché le altre proprietà non mi danno lo stesso errore?

Grazie per tutto l'aiuto che puoi offrire!

risposta

11

L'ignoranza non è beatitudine ... è semplicemente frustrante.

Ho finalmente capito che avevo un attributo [obbligatorio] su BirthCountryId. Questo stava causando il problema ... che ha assolutamente senso. Non posso dire a EF che è opzionale e richiesto allo stesso tempo.

Spero che questo risparmi qualcun altro dalla stessa frustrazione che ho attraversato.

+0

Sto ancora cercando il modo di aggiungere l'attributo [Required] a ForeignKeyField. Hai una risposta per correggere questo errore? – MasterLuV

+0

In realtà, il mio errore era ** perché ** dell'attributo '[Required]'. Rimuovendo l'attributo risolto il mio problema. Il problema è che non è possibile dichiararlo come un valore nullable int (ciò implica che è annullabile e quindi non richiesto) e aggiungere un attributo che indica a EF che è richiesto. Se è richiesto, non dovresti dichiararlo nullable int. – RHarris

+0

So che rimuovere l'attributo [Richiesto], quindi tutto funziona correttamente. Ma in realtà, la stringa è nullable, non possono essere nulli in EF con l'attributo [Required]. E possiamo ottenere ErrorMessage quando sono nulli o vuoti – MasterLuV

Problemi correlati