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; }
}
}