Sto cercando di creare un'entità cliente che contenga più persone di contatto e una persona di contatto principale, ma non riesco a aggiungere la migrazione, poiché sto riscontrando il seguente errore:
Impossibile determinare la relazione rappresentata dalla proprietà di navigazione "ContactPerson.Customer" di tipo "Cliente". Configurare manualmente la relazione o ignorare questa proprietà utilizzando l'attributo "[NotMapped]" o utilizzando "EntityTypeBuilder.Ignore" in "OnModelCreating".
Cliente
public class Customer
{
public Guid CustomerId { get; set; }
public string Name { get; set; }
public DateTime CreateDate { get; set; }
public string City { get; set; }
public string Address { get; set; }
// Contact person data
public virtual ContactPerson PrimaryContactPerson { get; set; }
public virtual ICollection<ContactPerson> ContactPersons { get; set; }
}
Referente
public class ContactPerson
{
public Guid ContactPersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual Customer Customer { get; set; }
}
Ho provato ad aggiungere personalmente le chiavi esterne e ad annotare la proprietà della chiave esterna con la mia entità, sia sull'entità Customer
sull'entità ContactPerson
, come questa:
public class ContactPerson
{
public Guid ContactPersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[ForeignKey("Customer")]
public Guid CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
Ma non sembra fare alcuna differenza, sto ancora ricevendo lo stesso errore. Come può essere che EF non possa determinare la relazione?
Suppongo che abbia qualcosa a che fare con la relazione uno-a-uno che esiste contemporaneamente con la relazione uno-a-molti, ma non riesco a spiegarmi questo problema. Consigli e suggerimenti sono molto apprezzati!
Se commento la proprietà di PrimaryContactPerson
, EF aggiunge la migrazione bene, quindi sono certo che questo abbia a che fare con le due diverse relazioni.
Sono riuscito a risolvere il problema utilizzando l'API Fluent Framework di Entity, in questo modo:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ContactPerson>(e =>
e.HasOne(r => r.Customer).WithMany(c => c.ContactPersons)
);
}