Сбой EntityHistory для собственного типа со ссылкой на другие объекты - PullRequest
0 голосов
/ 04 марта 2019

Вот моя модель:

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 голосов
/ 04 марта 2019

Если кому-то нужен обходной путь, необходимо перезаписать внешний ключ по умолчанию для принадлежащего объекта, чтобы мы передали имя свойства, которое всегда будет на первой позиции в коллекции внешних ключей:

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

...