6

Đây là tình huống. Có hai loại ElectricConsumer tức là CommercialConsumers & DomesticConsumers (Quaters) và một Quater được cấp cho một Employee. Dưới đây là mã của tôi nhưng có ngoại lệ.Không thể xác định kết thúc chính của liên kết giữa các loại

Không thể xác định khi kết thúc chính của một mối liên hệ giữa các loại EFcodefirstDemo.CodeFistModel.Quater và EFcodefirstDemo.CodeFistModel.Employee. Phần đầu chính của liên kết này phải được định cấu hình rõ ràng bằng cách sử dụng API thông thạo quan hệ hoặc chú thích dữ liệu.

Tôi biết tôi đang phạm sai lầm một số nơi vì tôi mới tham gia EF. Hy vọng bạn sẽ giải quyết vấn đề này.

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

Trả lời

10

ngoại lệ đó được đưa ra bởi vì bạn đang cố gắng để cấu hình một one-to-one mối quan hệ nhưng bạn không chỉ định mà kết thúc là hiệu trưởng trong mối quan hệ. Hiệu trưởng kết thúc là phần đầu tiên sẽ được chèn vào và có thể tồn tại mà không có phần phụ thuộc. Phụ thuộc kết thúc là một trong đó phải được chèn sau khi hiệu trưởng vì nó có chìa khóa nước ngoài cho hiệu trưởng. Để giải quyết vấn đề cụ thể này, bạn có thể sử dụng dữ liệu chú thích Required (Tôi cho rằng thực thể Quater là phụ thuộc vào trường hợp này):

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

Phải làm gì trong trường hợp một-to- (zero-hoặc-one)? –

+0

Hiệu trưởng là bắt buộc trong thực thể phụ thuộc, vì vậy khi bạn tạo một cá thể của thực thể phụ thuộc, bạn phải đặt thuộc tính điều hướng với một thể hiện của hiệu trưởng. Nếu bạn tạo một thể hiện của hiệu trưởng, bạn không cần phải thiết lập thuộc tính điều hướng phụ thuộc như vậy, trong trường hợp này hiệu trưởng có thể tồn tại mà không có sự phụ thuộc, do đó, ở cuối đó là một mối quan hệ một đến một – octavioccl

Các vấn đề liên quan