簡體   English   中英

EF Core-如何獲取聚合根的關聯實體?

[英]EF Core - How can I retrieve associated entities of an aggregate root?

在我的應用程序中,我嘗試在為一個簡單的基金帳戶建模時遵循DDD。

這些課程是

FundAccount

public Guid Id { get; set; }

private ICollection<AccountTransaction> _transactions = new List<AccountTransaction>();

public IReadOnlyCollection<AccountTransaction> Transactions => _transactions
            .OrderByDescending(transaction => transaction.TransactionDateTime).ToList();

AccountTransaction

public Guid Id { get; set; }

public decimal Amount { get; set; )

我正在嘗試從數據庫中檢索基金帳戶,其中包含以下交易:

var fundAccount = await _context.FundAccounts
                 .Include(a => a.Transactions)
                 .SingleAsync(a => a.Id == ...);

當我檢索FundAccount(數據庫中有交易記錄)時, Transactions有0 AccountTransaction

有人可以在這里看到我需要做什么嗎?

首先,在實體數據模型中使用“域邏輯”時(您不應該這樣做,但這是另一回事),請確保將EF Core配置為使用后備字段而不是屬性(默認值),方法是將以下內容添加到db上下文OnModelCreating覆蓋:

modelBuilder.UsePropertyAccessMode(PropertyAccessMode.Field);

此btw已被視為問題,將在3.0版本中修復-請參見Breaking Changes-默認使用Backing字段 但目前您必須包含以上代碼。

其次,您必須更改后備字段類型以與屬性類型兼容。

在您的情況下, ICollection<AccountTransaction>IReadOnlyCollection<AccountTransaction> 兼容,因為前者出於歷史原因不會繼承后者。 但是List<T> (和其他集合 )實現了這兩個接口,並且由於這是您用來初始化字段的方法,因此只需將其用作字段類型:

private List<AccountTransaction> _transactions = new List<AccountTransaction>();

進行這兩項修改后,EF Core將正確加載集合導航屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM