无法确定类型之间关联的主要结束

Ari*_*gri 7 c# entity-framework one-to-one ado.net-entity-data-model ef-code-first

情况就是这样.有两种类型的ElectricConsumer ie CommercialConsumers&DomesticConsumers(Quaters),一种Quater分配给一种Employee.下面是我的代码但遇到异常.

无法确定EFcodefirstDemo.CodeFistModel.Quater和EFcodefirstDemo.CodeFistModel.Employee类型之间关联的主要结尾.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.

我知道我在某些地方犯错误,因为我是EF的新手.希望你能解决这个问题.

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; }
}
Run Code Online (Sandbox Code Playgroud)

oct*_*ccl 15

启动该异常是因为您尝试配置一对一关系,但您没有指定哪一端是关系中的主体.主要末端是将首先插入的末端,并且可以在没有从属末端的情况下存在.从属端是必须在主体之后插入的端,因为它具有主体的外键.要解决此特定问题,您可以使用Required数据注释(我想Quater在这种情况下实体是依赖项):

public partial class Quater : ElectricConsumer
{   
  //...    
  [Required]
  public virtual Employee Employee { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果是一对一(零或一),该怎么办? (2认同)

归档时间:

查看次数:

5570 次

最近记录:

10 年,11 月 前