【发布时间】:2019-03-14 21:51:07
【问题描述】:
我对实体框架有点陌生。我有一个定义如下的类,对应于一个数据库表,该表具有由两列组成的复合外键:GroupID 和 CompanyID,以及名为 RegionID 的第三个外键:
[Table("GroupMembers")]
public class GroupMember
{
[Key, ForeignKey("GroupID"), Column(Order = 1)]
public int GroupCompanyID { get; set; }
[Key, ForeignKey("CompanyID"), Column(Order = 2)]
public int MemberCompanyID { get; set; }
[Column("MemberCode")]
public string MemberCompanyCode { get; set; }
[Column("RegionID")]
public int RegionId { get; set; }
}
当我拥有GroupID 和MemberCompanyID 的值时,我尝试了以下查询来检索MemberCode:
var GroupMember = await repository.GroupMembers
.FirstOrDefaultAsync(x => x.MemberID == memberId &&
x.CompanyID == manufacturerId);
我得到以下异常:
属性“GroupID”不能配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的 getter 和 setter。对于集合属性,类型必须实现 ICollection,其中 T 是有效的实体类型
我认为我在 OnModelCreating 方法中遗漏了一些东西,我尝试了以下方法,但没有奏效:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<GroupMember>()
.HasKey(gm => new {gm.GroupID, gm.MemberID});
}
另外需要注意的是,GroupID 和MemberID 都引用同一个主键列,在名为Organizations 的表中称为OrganizationID,只是值不同。我不确定这是否会影响任何事情。
谁能指出我正确的方向?谢谢!
【问题讨论】:
-
什么是
repository.CompanyGroupMembers? -
对不起,这是我的错字,我对 GroupMembers 进行了调整。谢谢!
标签: c# database entity-framework composite-primary-key