вставка с использованием linq-to-entity - PullRequest
0 голосов
/ 01 марта 2010

Привет, у меня проблемы с исправлением этой ошибки. Любая помощь по этой проблеме будет высоко ценится, спасибо!

Сообщение об ошибке:

Оператор сохранения, вставки или удаления магазина затронул неожиданное количество строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновите записи ObjectStateManager.

Всякий раз, когда я пытаюсь добавить ноутбук / рабочий стол, я получаю сообщение об ошибке выше.
Все работает нормально при локальном запуске, но не на dev. Веб-сайт и сервис / база данных находятся на двух разных устройствах разработки.

Tables:
Computer: ComputerID, UserID, HardwareName, Brand, IsDefaultDevice
Desktop: ComputerID,  MonitorWidth
Laptop: ComputerID, BatteryLife

generated sql:
exec sp_executesql N'insert [ScratchPad].[Computer]([UserID], [ComputerName], [Brand], [IsDefaultDevice])
values (@0, @1, @2, @3)
select [ComputerID]
from [ScratchPad].[Computer]
where @@ROWCOUNT > 0 and [ComputerID] = scope_identity()',N'@0 bigint,@1 nvarchar(19),@2 int,@3 bit',@0=2,@1=N'Computer666',@2=1,@3=0


using(var context = new MyDatabaseEntities())
{
       User user = context.Users.FirstOrDefault(x => x.UserID == userId);
       entityToAdd.User = user;
       bool hasOthers = context.Computers.Any(x=>x.User.UserID == userId);
       if(!hasOthers && !entityToAdd.IsDefaultDevice)
            entityToAdd.IsDefaultDevice = true;
       entityToAdd.BrandReference.EntityKey = Brand.GetDellProviderKey();
       context.AddToComputers(entityToAdd);
       context.SaveChanges();
}

Вот трассировка стека:

Создано необработанное исключение во время исполнения текущего веб-запрос. Информация относительно Происхождение и место исключения можно определить с помощью исключения трассировка стека ниже.

Трассировка стека:

[FaultException`1: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10259418
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +539
   myWebPortal.Repositories.UserServiceRef.IUserService.AddComputer(Int64 userId, Computer toAdd) +0
   myWebPortal.Repositories.UserServiceRef.UseServiceClient.AddComputer(Int64 userId, Computer toAdd) in c:\users\katelyn\documents\my web project\myWebPortal.repositories\service references\userserviceref\reference.cs:1282
   myWebPortal.Repositories.UserAccountRepository.AddComputer(Int64 userId, Computer computer) in C:\Users\katelyn\Documents\my Web Project\myWebPortal.Repositories\UserRepository.cs:238
   myWebPortal.Web.Controllers.ComputerController.AddComputer(ComputerModel model) in C:\Users\katelyn\Documents\my Web Project\myWebPortal.Web\Controllers\ComputerController.cs:71
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +69
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +236
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +31
   System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +85
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +632195
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +288
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +630660
   System.Web.Mvc.Controller.ExecuteCore() +125
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +48
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +15
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +85
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +454
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +263

Также при попытке добавить ноутбук / рабочий стол иногда вставляется строка «Компьютер», но не строка «ноутбук / рабочий стол».

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Я уже сталкивался с той же проблемой, и она была вызвана триггером INSTEAD OF в SQL Server. Мне кажется, что OptimisticConcurrencyExceptions возникают, когда SQL Server сообщает об успешном завершении запроса, но выполняющийся оператор SELECT не возвращает ожидаемое количество строк.

@ mrunge предоставил ссылку на решение, которое я разместил для этой проблемы в комментариях к ответу @ BasicLife.

Другая потенциальная причина - хранимая процедура, которая используется для вставок и обновлений вашей сущности. От http://msdn.microsoft.com/en-us/library/bb738618.aspx:

Оптимистичная конкуренция может исключение также происходит, когда вы определяете сущность Модель данных, которая использует хранимые процедуры обновить источник данных. В в этом случае возникает исключение когда хранимая процедура, которая используется выполнять обновления сообщает, что ноль строки были обновлены.

Я вполне уверен, что фактические ошибки SQL (нарушения ключа, нулевые ошибки и т. Д.), Возникающие во время обычного выполнения SQL-запроса, выдаваемого, будут сообщаться с использованием исключения, отличного от того, которое вы видели. Хотя я не могу вспомнить название исключения.

1 голос
/ 21 сентября 2010

Где вы создаете / инициализируете entityToAdd?

Можете ли вы подтвердить ограничения внешнего ключа и информацию первичного ключа (автоинкремент, тип и т. Д.) Похоже, что по какой-то причине вставка не удалась, что определяется неправильным числом затронутых строк.

попробуйте запустить SQL самостоятельно из консоли управления SQL - вы получаете какие-либо ошибки? запись вставлена ​​правильно?

Вы также можете убедиться, что в таблице нет триггеров или аналогичных элементов, которые могут вызывать проблемы.

...