6

Ecco la situazione. Esistono due tipi di ElectricConsumer ovvero CommercialConsumers & I componenti nazionali (Quaters) e uno Quater sono assegnati a uno Employee. Di seguito è riportato il mio codice ma encountring l'eccezione.Impossibile determinare la fine principale di un'associazione tra i tipi

impossibile determinare il fine principale di un'associazione tra i tipi EFcodefirstDemo.CodeFistModel.Quater e EFcodefirstDemo.CodeFistModel.Employee. La fine principale di questa associazione deve essere configurata in modo esplicito utilizzando l'API della relazione o le annotazioni di dati.

So che sto facendo degli errori alcuni perché sono nuovo di EF. Spero che risolverai questo problema.

public class Employee 
{ 
    public Employee() 
    { 
     MeterReadings = new List<MeterReading>(); 
     MeterReadings = new List<MeterReading>(); 
    } 

    [Key] 
    [Column(Order = 1)] 

    public int EmployeeID { get; set; } 
    [Key] 
    [Column(Order = 2)] 

    public Int64 EmployeeNo { get; set; } 
    public String EmployeeName { get; set; } 
    [DefaultValue(true)] 
    public bool Gender { get; set; } 
    [DefaultValue(true)] 

    public bool HasResidence { get; set; } 
    public bool IsInDivision { get; set; } 

    public int? ManagerID { get; set; } 
    public virtual Employee Manager { get; set; } 


    public virtual Department Deparment { get; set; } 
    public int QuaterID { get; set; } 
    [ForeignKey("QuaterID")] 
    public virtual Quater Quater { get; set; } 

    public virtual ICollection<MeterReading> MeterReadings { get; set; } 

} 

public partial class ElectricConsumer 
{ 
    [Key] 
    public int ElectricConsumerID { get; set; } 
    public String Area { get; set; } 
    [MaxLength(350)] 
    public String Address { get; set; } 
    public virtual ICollection< Meter> Meters { get; set; } 
} 




public partial class Quater : ElectricConsumer 
{ 

    public Quater() 
    { 
     // Meters = new List<Meter>(); 
    } 

    public int QuaterNo { get; set; } 
    public int QuaterPortionNo { get; set; } 
    public virtual Employee Employee { get; set; } 


} 

public partial class CommericalCustomer : ElectricConsumer 
{ 
    public CommericalCustomer() 
    { 
     // Meters = new List<Meter>(); 
    } 
     public String Name { get; set; } 
    [Index("NicIndex", IsUnique = true)] 
    public Int64 NIC { get; set; } 

    public int ShopNo { get; set; } 


} 


public partial class Meter 
{ 
    public Meter() 
    { 
     InstalledDate = DateTime.Now; 
     MeterReadings = new List<MeterReading>(); 
     ElectricBills = new List<ElectricBill>(); 
    } 

    [Key] 
    [Column(Order = 1)] 
    public int MeterID { get; set; } 
    [Key] 
    [Column(Order = 2)] 
    public int MeterNo { get; set; } 
    [DefaultValue(1)] 
    public int Phase { get; set; } 

    public DateTime InstalledDate { get; set; } 
    [DefaultValue(true)] 
    public bool IsOperating { get; set; } 

    public virtual ElectricConsumer ElectricConsumer { get; set; } 
    public virtual ICollection<MeterReading> MeterReadings { get; set; } 
    public virtual ICollection<ElectricBill> ElectricBills { get; set; } 
} 

risposta

10

Tale eccezione è lanciato perché si sta tentando di configurare un uno-a-uno ma non si specificano che finiscono è il principale nel rapporto. Il numero principale è quello che verrà inserito per primo e che può esistere senza quello dipendente. Dipendente fine è quello che deve essere inserito dopo l'entità perché ha una chiave esterna per l'entità. Per risolvere questo problema particolare è possibile utilizzare i dati di annotazione Required (suppongo l'entità Quater è il dipendente in questo caso):

public partial class Quater : ElectricConsumer 
{ 
    //...  
    [Required] 
    public virtual Employee Employee { get; set; } 
} 
+0

Cosa fare in caso di uno-a-(zero-or-one)? –

+0

L'entità è richiesta nell'entità dipendente, pertanto quando si crea un'istanza dell'entità dipendente è necessario impostare la proprietà di navigazione con un'istanza di principal. Se si crea un'istanza di principal non è necessario impostare la proprietà di navigazione dipendente, in questo caso l'entità può esistere senza la dipendenza, quindi alla fine è una relazione da uno a zero – octavioccl