这是我的模特:
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”值,保存操作将终止:
是否有任何解决方法,或者我们不能以拥有的实体类型存储引用?
答案 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());
}