0

これが私のモデルです:

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; }
}

新しい投資を作成して DB に保存しようとすると、ABP はエンティティの変更を履歴テーブルに保存する必要があるかどうかを識別しようとしますが、所有エンティティ (アドレス) の所有者 (投資) を識別しようとするとクラッシュします。これは、ABP が常に最初の外部キーを取得するためです (所有者エンティティとの関係を前提としています) が、私の場合、最初の外部キーは他のエンティティとの関係であるため、「PrincipalToDependent」値がなく、保存アクションが終了します。

ここに画像の説明を入力 ここに画像の説明を入力

これに対する回避策はありますか、または所有エンティティ タイプに参照を格納することはできませんか?

4

1 に答える 1

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());
}

結果は次のとおりです。 ここに画像の説明を入力

于 2019-03-04T14:53:05.987 に答える