Структура сущности Вставьте в одну таблицу и обновите в другой таблице - PullRequest
1 голос
/ 26 августа 2011

Мы используем ASP.NET MVC 3 и Entity Framework для нашего текущего проекта. Наши модели сущностей (я дал только важные поля)

public partial class Product
    {
        [Key]
        public int ProductID { get; set; }
        public string Name { get; set; }
        <remaining fields>
        public virtual ProductStock ProductStock { get; set; }
}

public partial class ProductStock
    {
        [Key, Column(Order = 0)]
        [ForeignKey("Product")]
        public int ProductID { get; set; }
        public decimal QuantityOnHand { get; set; }
        public Nullable<decimal> QuantitySold { get; set; }
        public Nullable<decimal> QuantityOnOrder { get; set; }
        public System.DateTime ModifiedDate { get; set; }

        public virtual Product Product { get; set; }
    }
public partial class PurchaseOrderHeader
    {
        public PurchaseOrderHeader()
        {
            this.PurchaseOrderDetails = new HashSet<PurchaseOrderDetail>();
        }
        [Key, Column(Order = 0)]
        public int PurchaseOrderID { get; set; }
        public System.DateTime OrderDate { get; set; }
        public decimal SubTotal { get; set; }
        public decimal TaxAmt { get; set; }
        public decimal Freight { get; set; }
        public decimal TotalDue { get; set; }
        public virtual ICollection<PurchaseOrderDetail> PurchaseOrderDetails { get; set; }
}

public partial class PurchaseOrderDetail
    {
        public int PurchaseOrderID { get; set; }
        public int PurchaseOrderDetailID { get; set; }
        public decimal OrderQty { get; set; }
        public int ProductID { get; set; }
        public decimal UnitPrice { get; set; }
        public decimal LineTotal { get; set; }

        public virtual PurchaseOrderHeader PurchaseOrderHeader { get; set; }
        public virtual Product Product { get; set; }
    }

Теперь требуется, чтобы при создании заказа на покупку он вставлял данные в таблицу PurchaseOrderHeader и в таблицу PurchaseOrderDetail (с этим проблем нет) Теперь нам нужно обновить таблицу ProductStock для поля QuantityOnOrder (добавить OrderQty).

  1. Как мы можем обновить это?
  2. Должны ли мы создать транзакцию и создать отдельную операцию вставки для сущности PurchaseOrderHeader и другую операцию для сущности ProductStock и зафиксировать транзакцию?
  3. Используем ли мы хранимую процедуру?
  4. Или мы можем использовать лучший способ для достижения этой цели?

Может кто-нибудь предложить решения?

1 Ответ

2 голосов
/ 26 августа 2011

Если вы сделаете все изменения в своем контексте до вызова SaveChanges(), EF фактически создаст для вас транзакцию.Таким образом, здесь процесс выглядит следующим образом:

  1. Создайте (или получите) свой контекст
  2. Вставьте ли вы
  3. Выберите элемент, который необходимо обновить, затем изменитеценность на это.(Это обновление точно такое же, как и любое другое обновление. Пример приведен ниже.)
  4. Вызов SaveChanges() в контексте.

Что касается того, как на самом деле выполнить обновление,что вам нужно сделать, это выбрать вещь, которую вы хотите обновить.Итак, запись ProductStock для этого конкретного продукта.Вы тогда просто измените значение.Что-то вроде этого:

var stock  = (from p in context where p.ProductId == the_product_id select p).First();
stock.QuantityOnOrder = new_value;

Надеюсь, это поможет.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...