ASP.Net Mvc3 Редактировать форму заказа Ошибка при сохранении элементов заказа

Я довольно новичок в NHibernate и ASP.NET MVC, так что прости меня, если я не согласен с этим. Но, по сути, я пытаюсь создать форму редактирования для заказа.

Я использую C# и NHibernate с ASP.NET MVC3.

По сути, у меня есть отношение многие ко многим, где в таблице ссылок есть несколько дополнительных полей. Я знаю, как сделать обычную архитектуру "многие ко многим" в s # arp с помощью nhibernate, используя переопределения, но я не уверен, как включить дополнительное поле в таблицу ссылок.

В частности, я связываю Orders с выпусками, а таблица связывания называется OrderItems. Таблица OrderItems также имеет другой внешний ключ, который называется LimitedEditionSerial.

Я создал класс Model и класс Cud Tasks для OrderItems (таблица ссылок), но не контроллер и представление, так как у него не должно быть их. Вот код для моего метода Edit в контроллере Order.

public ActionResult Edit(EditOrderViewModel orderModel)
    {
        Order order = orderModel.Order;
        int[] TempEditionIds = orderModel.TempEditionIds ;
        int[] TempSerials = orderModel.TempSerials ;
        if (ModelState.IsValid)
        {
            order.Customer = _customerRepository.Get(order.Customer.Id);
            order.OrderItems = new List<OrderItem>();
            for (int i = 0; i < TempEditionIds.Length; i++)
            {
                OrderItem item = new OrderItem();

                item.Order = _orderRepository.Get(order.Id);
                item.Edition = _editionRepository.Get(TempEditionIds[i]);
                if (TempSerials[i] != 0)
                {
                    item.LimitedEditionSerial = _serialRepository.GetAll().Where(o => o.Number == TempSerials[i]).
                        Where(o => o.Edition.Id == TempEditionIds[i]).Single();
                }
                else
                {
                    item.LimitedEditionSerial = null;
                }
                if (item.Edition != null)
                {
                    order.OrderItems.Add(item);
                }
            }
            foreach (OrderItem item in order.OrderItems)
            {
                _itemTasks.SaveOrUpdate(item);
            }
            ActionConfirmation<Order> confirmation = _orderTasks.SaveOrUpdate(order);
            if (confirmation.WasSuccessful)
            {
                TempData["message"] = confirmation.Message;
                return RedirectToAction("Index", "Order");
            }

            ViewData["message"] = confirmation.Message;
        }
        return View(_orderTasks.CreateEditViewModel(order));
    }

В любом случае по какой-то причине это дает мне сообщение "Невозможно вставить значение NULL в столбец" OrderFk ", таблица" Frameworker2.dbo.OrderItems "; столбец не допускает нулевые значения. ОБНОВЛЕНИЕ не удается. Заявление было прекращено.' ошибка при обновлении. Создает работу нормально, но обновления дают мне эту ошибку. Я был бы признателен за любые решения о том, как исправить эту ошибку, но если у вас есть лучший способ обработки отношений "многие ко многим" с дополнительными полями в таблице ссылок, я бы тоже хотел это услышать. Я знаю, что, вероятно, делаю это совершенно неправильно

редактировать: вот мой заказ сущности

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SharpLite.Domain;

namespace FrameWorker2.Domain
{
public class Order : Entity
{
    public virtual Customer Customer { get; set; }
    public virtual SalesPerson SalesPerson { get; set; }
    public virtual Address ShippingAddress { get; set; }
    public virtual Address BillingAddress { get; set; }
    public virtual IList<OrderItem> OrderItems { get; set; }

    public Order()
    {
        //This just prevents the possibility of a null list exception.
        OrderItems = new List<OrderItem>();
    }
    public virtual Location Location { get; set; }

    public virtual DateTime DateOrdered { get; set; }
    public virtual DateTime DatePromised { get; set; }
    public virtual DateTime DateFramed { get; set; }
    public virtual DateTime DateCompleted { get; set; }
    public virtual DateTime DatePaidInFull { get; set; }


}
}

0 ответов

Другие вопросы по тегам