EntityHistory对于引用其他实体的拥有类型失败

时间:2019-03-04 10:53:47

标签: c# asp.net-core aspnetboilerplate abp

这是我的模特:

public class Investment : FullAuditedEntity<Guid>
{
    public string some_property { get; set; }
    public Address Address { get; set; }
}

public class Address : ValueObject<Address>
{
    [ForeignKey("CountryId")]
    public Country Country { get; set; }
    [Required]
    public int CountryId { get; set; }
    [ForeignKey("StateId")]
    public State State { get; set; }
    public string StateId { get; set; }
    [ForeignKey("DistrictId")]
    public District District { get; set; }
    public string DistrictId { get; set; }
    [ForeignKey("CommuneId")]
    public Commune Commune { get; set; }
    public string CommuneId { get; set; }
    [Required]
    public string City { get; set; }
    public string Street { get; set; }
}

当我尝试创建新投资并将其保存到数据库时,ABP尝试确定是否应将实体更改存储在历史表中,但是在尝试为拥有的实体(地址)标识所有者(投资)时会崩溃。 这是因为ABP始终使用第一个外键(假设它与所有者实体有关系),但是在我的情况下,第一个外键是与其他实体的关系,因此没有“ PrincipalToDependent”值,保存操作将终止:

enter image description here enter image description here

是否有任何解决方法,或者我们不能以拥有的实体类型存储引用?

1 个答案:

答案 0 :(得分:0)

万一有人想要一种解决方法,则需要覆盖拥有实体的默认外键,以便我们传递始终在外键集合中始终位于第一位的属性名称。

public class InvestmentConfiguration : IEntityTypeConfiguration<Investment>
{
    public void Configure(EntityTypeBuilder<Investment> configuration)
    {
        configuration.OwnsOne(typeof(Address), "Address", buildAction => buildAction.HasForeignKey("AInvestmentId"));
    }
}

然后在DBContext类中:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.ApplyConfiguration(new InvestmentConfiguration());
}

,结果是: enter image description here