我正在尝试实现 EF 解决方案,但出现以下运行时异常:
One or more validation errors were detected during model generation:
GroupMembership_Group_Source: : Multiplicity is not valid in Role
'GroupMembership_Group_Source' in relationship 'GroupMembership_Group'. Because the
Dependent Role refers to the key properties, the upper bound of the multiplicity of the
Dependent Role must be '1'.
Gift_Membership_Source: : Multiplicity is not valid in Role
'Gift_Membership_Source' in relationship 'Gift_Membership'. Because the Dependent Role
refers to the key properties, the upper bound of the multiplicity of the Dependent Role
must be '1'.
我有以下课程:
public class Group
{
public int GroupId { get; set; }
public virtual ICollection<GroupMembership> Memberships { get; set; }
}
public class Gift
{
public int GiftId { get; set; }
public virtual GroupMembership Membership { get; set; }
}
public class GroupMembership
{
public int GroupMembershipId { get; set; }
public virtual ICollection<Gift> Gifts { get; set; }
public virtual Group Group { get; set; }
}
以及以下配置(为简洁起见,已缩短):
public class GroupConfiguration : EntityTypeConfiguration<Group>
{
public GroupConfiguration()
{
HasMany(x => x.Memberships).WithRequired(x => x.Group).HasForeignKey(x => x.GroupMembershipId);
}
}
public class GiftConfiguration : EntityTypeConfiguration<Gift>
{
public GiftConfiguration()
{
HasRequired(x => x.Membership).WithMany(x => x.Gifts).HasForeignKey(x => x.GiftId);
}
}
public class GroupMembershipConfiguration : EntityTypeConfiguration<GroupMembership>
{
public GroupMembershipConfiguration()
{
HasRequired(x => x.Group).WithMany(x => x.Memberships).HasForeignKey(x => x.GroupMembershipId);
HasMany(x => x.Gifts).WithRequired(x => x.Membership).HasForeignKey(x => x.GiftId);
}
}
提前致谢
编辑:关于礼品/用户关系的其他例外情况...
public class Gift
{
public int GiftId { get; set; }
public int ClaimedByUserId { get; set; }
public virtual User ClaimedByUser { get; set; }
}
public class User
{
public int UserId { get; set; }
}
public class GiftConfiguration : EntityTypeConfiguration<Gift>
{
public GiftConfiguration()
{
HasOptional(x => x.ClaimedByUser).WithOptionalPrincipal();
}
}
它不喜欢映射。 我得到Invalid column name 'ClaimedByUser_UserId'.
您的模型中存在一些问题。如果要在 GroupMembership
和 Group
之间配置一对多关系,则模型应如下所示:
public class Group
{
public int GroupId { get; set; }
public virtual ICollection<GroupMembership> Memberships { get; set; }
}
public class GroupMembership
{
public int GroupMembershipId { get; set; }
public virtual ICollection<Gift> Gifts { get; set; }
public int GroupId {get;set;} //Add this FK property
public virtual Group Group { get; set; }
}
您的 Fluent API 配置将是:
public GroupConfiguration()
{
HasMany(x => x.Memberships).WithRequired(x => x.Group).HasForeignKey(x => x.GroupId);
}
问题是您在一对多关系中使用实体的 PK 作为 FK,这是怎么回事。在第二个关系中也会发生同样的情况,因此在Gift
和GroupMembership
之间的关系中也发生相同的情况(在Gift
实体中添加 FK 属性):
public class Gift
{
public int GiftId { get; set; }
public int GroupMembershipId { get; set; } //Add this FK property
public virtual GroupMembership Membership { get; set; }
}
和配置:
HasRequired(x => x.Membership).WithMany(x => x.Gifts).HasForeignKey(x => x.GroupMembershipId);
此外,您无需在 GroupMembershipConfiguration
类中重复配置这两个关系(删除它们)。用一次就足够了。
更新
尝试使用此配置:
HasOptional(x => x.ClaimedByUser).WithMany().HasForeignKey(g=>g.ClaimedByUserId );
我认为这是另一种一对多关系,因为一个用户可能与一个或多个礼物相关联。