多重性在角色中无效.例外



我正在尝试实现 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'.

您的模型中存在一些问题。如果要在 GroupMembershipGroup 之间配置一对多关系,则模型应如下所示:

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,这是怎么回事。在第二个关系中也会发生同样的情况,因此在GiftGroupMembership之间的关系中也发生相同的情况(在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 );

我认为这是另一种一对多关系,因为一个用户可能与一个或多个礼物相关联。

最新更新