Объект не может быть приведен из DBNull к другим типам Entity Framework - PullRequest
1 голос
/ 22 апреля 2011

Я обновляю два связанных объекта 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.

Не могу понять, почему это происходит.

1 Ответ

0 голосов
/ 22 апреля 2011

Проблема не в каких-либо значениях, которые вы меняете. Фактически, ваши новые значения относятся к необнуляемым типам в местах их установки.

Поскольку тип данных с ошибкой - Int16, я бы проверил все сопоставления со значениями short, чтобы найти любые ненулевые свойства, сопоставленные с обнуляемыми столбцами.

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