实体框架:一对多关系的通用实体

时间:2017-02-09 11:59:05

标签: c# asp.net entity-framework entity-framework-6 entity-framework-core

我正在尝试首先使用继承在实体框架代码中实现与通用实体解决方案的一对多关系。它没有产生预期的结果。我需要这个架构:

CommonEntity    Address         Licensee    User
--------------  -------------   ----------- ---------
CID(PK)         AddressID(PK)   CID(FK/PK)  CID(FK/PK)
AddressID(FK)

CommonEntity:

public class CommonEntity{
     [key]
     public int CID{get;set;}
     public virtual List<Address> Addresses { get; set; }
}

地址:

public class Address{
     [key]
     public int AddressID{get;set;}
     public string country{get;set;}
}

被许可:

public class Licensee{
     [key]
     [ForeignKey("CommonEntity")]
     public int CID{get;set;}
     public string CompanyName{get;set;}
}

用户:

public class User{
     [key]
     [ForeignKey("CommonEntity")]
     public int CID{get;set;}
     public string UserName{get;set;}
     public string Pass{get;set;}
}

DbContext类:

public class DataModelContext : DbContext
{
    public DbSet<CommonEntity> CommonEntity { get; set; }
}

上面的代码给出了这个例外:

  

类型上属性'CommonID​​'的ForeignKeyAttribute   'TestingEF.Models.Licensee'无效。导航属性   在依赖类型上找不到“CommonEntity”   'TestingEF.Models.Licensee'。 Name值应该是有效的   导航属性名称。

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。 机型:

public class CommonEntity{
     [key]
     public int CID{get;set;}

     public long AddressId { get; set; }

     [ForeignKey("Address")]
     public virtual List<Address> Addresses { get; set; }
}
public class Address{
     [key]
     public int AddressID{get;set;}
     public string country{get;set;}
     public virtual ICollection<CommonEntity> CommonEntity { get; set; }
}
[Table("Licensee")]
public class Licensee{
     public string CompanyName{get;set;}
}
[Table("User")]
public class User{
     public string UserName{get;set;}
     public string Pass{get;set;}
}

Dbcontext类:

public class DataModelContext : DbContext
{
        public DbSet<CommonEntity> CommonEntity { get; set; }
        public DbSet<Address> Addresses { get; set; }
}