36 messaggi dal 29 settembre 2012
ciao,

come posso fare a rimappare nel model di ef una relazione?

classe Doctor
public int? UserDelID { get; set; }    
public int? UserUpdID { get; set; } 
public int? UserInsID { get; set; }
public virtual User UserIns { get; set; }
public virtual User UserUpd { get; set; }     
public virtual User UserDel { get; set; }

Classe User
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? UserID { get; set; }   


in pratica Doctor.UserIns, Doctor.UserDel, Doctor.UserUpd devono referenziarsi con User.UserID ( rappresenteranno 3 utenti della tabella user )

ottengo sempre questo errore :

InvalidOperationException: Unable to determine the relationship represented by navigation property 'Doctor.UserIns' of type 'User'. Either manually configure the relationship, or ignore this property from the model.

ciao

grazie
11.862 messaggi dal 09 febbraio 2002
Contributi
Ciao,
la chiave primaria della tua entità User non dovrebbe essere nullable. Cambia il suo tipo da int? a int. Probabilmente questa cosa manda in confusione Entity Framework che così non capisce quale sia, tra User e Doctor, l'entità principale nella relazione.

Quindi, Entity Framework ti sta chiedendo di mappare esplicitamente la relazione tra l'entità Doctor ed i suoi User correlati.
"Mappare esplicitamente" vuol dire usare gli attributi o l'interfaccia fluente di code first per indicare esattamente quali sono le proprietà di navigazione e le relative chiavi esterne.

Dal tuo codice mi sembra che tu voglia usare gli attributi, quindi dovresti leggere questo articolo:
http://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in-code-first.aspx

Il consiglio che ti dà l'articolo è questo, che è perfetto per il tuo caso:
you can use InverseProperty and ForeignKey attribute for multiple relationships between the same classes. 


Per il momento usa l'attributo ForeignKey per correlare la foreignkey e la sua proprietà di navigazione.
public int? UserDelID { get; set; }    
public int? UserUpdID { get; set; } 
public int? UserInsID { get; set; }
[ForeignKey("UserInsId")]
public virtual User UserIns { get; set; }
[ForeignKey("UserUpdId")]
public virtual User UserUpd { get; set; }
[ForeignKey("UserDelId")]     
public virtual User UserDel { get; set; }


Poi, se hai altre 3 proprietà di navigazione verso Doctor nell'entità User, allora usa l'attributo InverseProperty per correlarle.
[InverseProperty("UserIns")]
public virtual ICollection<Doctor> DoctorsIns { get; set; }
[InverseProperty("UserUpd")]
public virtual ICollection<Doctor> DoctorsUpd { get; set; }
[InverseProperty("UserDel"]
public virtual ICollection<Doctor> DoctorsDel { get; set; }


ciao e buone feste!
Moreno

Enjoy learning and just keep making
36 messaggi dal 29 settembre 2012
Ciao,

grazie mille, sempre gentile e disponibile...

buone feste anche a te.

ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.