[英]Entity Framework 4.1: How can I access virtual entity properties after creating a new entity?
這是我的簡化代碼:
// 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
}
}
這里的問題是,即使用戶在創建過程中已相應地設置了ProductID
,當嘗試執行CreatePurchaseDebit()
Product
也會為null
。
我希望將新的Order
添加到DbContext
將通過關聯的外鍵ID填充虛擬域模型屬性。 在調試器中,我可以看到Order
具有多個OrderLineItems
,每個OrderLineItem
具有有效的ProductID
,但是Product
為null
所以我無法訪問Product
的價格!
那么有沒有辦法告訴Entity Framework填充虛擬域模型屬性,還是我的設計不好?
PS:即使在添加新訂單到DbContext Product
后添加添加,我調用SaveChanges()
仍然為null
。 我想確保在調用SaveChanges()
之前該Order
具有購買借方,以便沒有交易就不可能存在該訂單。
謝謝!
僅僅因為您設置了ProductId
就不會加載ProductId
。 如果您創建新Order
並希望用產品填充訂單行項目,請使用產品ID從數據庫加載產品並將其分配給訂單行項目。
所以不要這樣做:
var order = new Order
{
CustomerId = customerId,
OrderLineItems = new List<OrderLineItme>
{
new OrderLineItem
{
ProductId = productId
}
}
};
用這個:
var product = context.Products.Single(p => p.Id == productId);
var order = new Order
{
CustomerId = customerId,
OrderLineItems = new List<OrderLineItme>
{
new OrderLineItem
{
Product = product
}
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.