[英]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
有0AccountTransaction
?
有人可以在這里看到我需要做什么嗎?
首先,在實體數據模型中使用“域邏輯”時(您不應該這樣做,但這是另一回事),請確保將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.