0
这里是我的简化代码:实体框架4.1:如何在创建新实体后访问虚拟实体属性?
// 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
当是即使ProductID
已相应地由用户在创建过程中设置null
。
我的希望是将新的Order
添加到DbContext
将通过关联的外键ID填充虚拟域模型属性。在调试器中,我可以看到Order
有多个OrderLineItems
,并且每个OrderLineItem
都有有效的ProductID
,但Product
是null
所以我无法访问Product
的价格!
那么有没有办法告诉实体框架填充虚拟域模型的属性,或者是我的设计不好?
PS:即使在添加新的订单到DbContext Product
仍然是null
后,我呼叫SaveChanges()
。在致电SaveChanges()
之前,我想确保Order
有一个购买借记卡,以便在没有交易的情况下订单不可能存在。
谢谢!