0

基于示例,我创建了以下自定义连接表(使用 EF Core 5),因为我需要在我的自定义连接表中添加一个额外的属性:

modelBuilder.Entity<Property>(property =>
{
    property
        .HasMany(_ => _.Addresses)
        .WithMany(_ => _.Properties)
        .UsingEntity<PropertyAddress>(
            _ => _.HasOne(_ => _.Address).WithMany().HasForeignKey(_ => _.AddressId),
            _ => _.HasOne(_ => _.Property).WithMany().HasForeignKey(_ => _.PropertyId));
});

public class PropertyAddress
{
    public string PropertyId { get; set; }
    public string AddressId { get; set; }
    public int SequenceNumber { get; set; }
    public Property Property { get; set; }
    public Address Address { get; set; }
}

public class Property
{
    public ICollection<Address> Addresses { get; set; }
}

public class Address
{
    public ICollection<Property> Properties { get; set; }
}

自定义连接表PropertyAddress按预期工作,但是:如何(以编程方式)PropertyAddress.SequenceNumber在保存/更新记录之前设置自定义属性的值?(因为整个加入机制(现在)仍然由 EF Core '在幕后'处理。)

4

1 回答 1

0

1-首先,你应该有 public DbSet PropertyAddress{ get; 放; } 在你的 DBContext 中,然后用它来插入你的对象。例子:

1-实体

public class GroupMember
{
    public int GroupMemberId { get; set; }

    [Required]
    public int UserId { get; set; }
    [Required]
    public int GroupId { get; set; }
    [Required]
    public DateTime JoinDate { get; set; }
    [Required]
    public int RoleTypeGroupId { get; set; }

    //Navigation
    public User User { get; set; }
    public Group Group { get; set; }
    public RoleTypeGroup RoleType { get; set; }
}

2-DbContext

public class AppDataContext : DbContext
{
  //Code

    public DbSet<GroupMember> GroupMembers { get; set; }

}

3-您需要创建 PropertyAddress 的对象并根据需要设置他的值。

4-使用EF插入对象或更新它

 unitOfWork.GroupMemberRepository.Add(groupMember);
  unitOfWork.SaveChanges();
 
于 2021-10-13T15:34:12.483 回答