这是我的简化代码:
// Domain models
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; }
public virtual ICollection OrderLineItems { get; set; }
public virtual ICollection Transactions { get; set; }
public void CreatePurchaseDebit()
{
var purchaseDebit = new Transaction()
{
Amount = OrderLineItems.Select(x => x.Product)
.Sum(x => x.Price) * -1
};
Transactions.Add(purchaseDebit);
}
}
public class OrderLineItem
{
public int ID { get; set; }
public int OrderID { get; set; }
public int ProductID { get; set; }
public virtual Product Product { get; set; }
}
public class Product
{
public int ID { get; set; }
public decimal Price { get; set; }
}
// Repository
public class Repository
{
public void Add(Order order)
{
context.Add(order);
order.CreatePurchaseDebit(); // This throws an error
}
}
这里的问题是,当尝试执行时CreatePurchaseDebit()
Product
,null
即使ProductID
用户在创建过程中已经相应地设置了。
我希望添加新Order
的DbContext
将通过关联的外键 ID 填充虚拟域模型属性。在调试器中,我可以看到Order
有多个OrderLineItems
,并且每个OrderLineItem
都有一个有效的,ProductID
但是我无法访问的价格!Product
null
Product
那么有没有办法告诉实体框架填充虚拟域模型属性或者我的设计不好?
PS:即使我SaveChanges()
在将新订单添加到 DbContext 之后调用Product
仍然是null
. 我想确保Order
在致电之前有购买借记卡,SaveChanges()
这样在没有交易的情况下订单就不可能存在。
谢谢!