Я обновляю два связанных объекта Entity, назовем их Order и OrderDetails.Каждое поле, кроме первичных полей, может быть обнулено в базе данных.
Ниже приведен фрагмент кода:
ClientEntities ce = new ClientEntities();
Order order = (from p in ce.Orders
where p.OrderID == OrderID
select p).FirstOrDefault();
decimal discountpercent = decimal.Parse(rntb_DiscountPercent.DbValue.ToString());
foreach (OrderDetail oDetail in order.OrderDetails)
{
decimal listprice = iDetail.PurchasedItem.ListPrice.GetValueOrDefault();
decimal discountvalue = listprice * (discountpercent / 100);
decimal paidprice = Decimal.Round(listprice - discountvalue, 2);
oDetail.ClientAmountReceived = paidprice;
}
order.DiscountPercent = rntb_DiscountPercent.Value;
ce.SaveChanges();
Когда контекст переходит к фиксации изменений в БД, я получаю следующую ошибку:
System.) в System.Data.Mapping.Update.Internal.Propagator.Evaluator.Cast (значение объекта, тип clrPrimitiveType) в System.Data.Mapping.Update.Internal.Propagator.Evaluator.Visit (узел DbCastExpression) в System.Data.Common.ДоменInternal.UpdateTranslator.d_ 0.MoveNext () в System.Linq.Enumerable.d _71 1.MoveNext()
at System.Data.Mapping.Update.Internal.UpdateCommandOrderer..ctor(IEnumerable
1 команд, UpdateTranslatoПереводчик) в System.Data.Mapping.Update.Internal.UpdateTranslator.ProduceCommands () в System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager, IEntityAdapter) в System.Data.EntityDate.Uli.(IEntityStateManager entityCache) в System.Data.Objects.ObjectContext.SaveChanges (параметры SaveOptions) в System.Data.Objects.ObjectContext.SaveChanges () в BSpace.InvoicePage.lbtn_CalculateDiscount_Click (объект o, клиентский файл \ Project \ ins)\ trunk \ Client Application \ Source \ ClientProject \ OrderPage.aspx.cs: строка 1069 в System.EventHandler.Invoke (отправитель объекта, EventArgs e) в System.Web.UI.WebControls.Button.OnClick (EventArgs e) в системе.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) в System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (строковое событиеArgument) в System.Web.UI.ostBackEventContBackEvent, String eventArgument) в System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) в System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое includeStagesAfterAsyncPoint)
в базе данных Orders.DiscountPозависимый ноль.ClientAmountReceived (деньги, ноль).
Не уверен, почему это происходит, поскольку я обновляю только эти два поля.Я пытался убедиться, что в каждом поле есть данные, и все еще получаю эту ошибку.Я также проверил файл модели данных, чтобы убедиться, что сопоставления таблиц правильны для всех связанных полей.OrderDetails.ClientAmountReceived переводится в Nullable, а Order.DiscountPercent переводится в Nullable.
Не могу понять, почему это происходит.