簡體   English   中英

實體框架4.1:創建新實體后如何訪問虛擬實體屬性?

[英]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 ,但是Productnull所以我無法訪問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.

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