Не удается обновить или удалить после переноса EntityFramwork 6 и VS 2013 в приложении службы данных WCF - программирование

Не удается обновить или удалить после переноса EntityFramwork 6 и VS 2013 в приложении службы данных WCF

После перехода на EntityFramework и VS 2013 я не могу обновить или удалить ресурс.

Request URL:service.svc/Orders(22354)
Request Method:DELETE
Status Code:500 Internal Server Error
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Host:localhost
Origin:http://localhost
Proxy-Connection:keep-alive
Referer:orders.html
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)         Chrome/31.0.1650.57 Safari/537.36
X-Requested-With:XMLHttpRequest

У меня есть следующая ошибка:

   <?xml version="1.0" encoding="UTF-8"?>
   <m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
       <m:code />
       <m:message xml:lang="fr-FR">An error occurred while processing this request.</m:message>
       <m:innererror>
           <m:message>Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "System.Data.Services.resources" was correctly embedded or linked into assembly "Microsoft.OData.EntityFrameworkProvider" at compile time, or that all the satellite assemblies required are loadable and fully signed.</m:message>
           <m:type>System.Resources.MissingManifestResourceException</m:type>
           <m:stacktrace>at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)&#xD;
      at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark&amp; stackMark)&#xD;
      at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark&amp; stackMark)&#xD;
      at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)&#xD;
      at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)&#xD;
      at System.Data.Services.TextRes.GetString(String name, Object[] args)&#xD;
      at System.Data.Services.Providers.ObjectContextServiceProvider.SetConcurrencyValues(Object resource, Nullable`1 checkForEquality, IEnumerable`1 concurrencyValues)&#xD;
      at System.Data.Services.UpdatableWrapper.SetETagValues(Object resourceCookie, ResourceSetWrapper container)&#xD;
      at System.Data.Services.DataService`1.HandleDeleteOperation(RequestDescription description, IDataService dataService)&#xD;
      at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)&#xD;
      at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)&#xD;
      at System.Data.Services.DataService`1.HandleRequest()</m:stacktrace>
       </m:innererror>
   </m:error>

Любая идея?

Спасибо за вашу помощь.

4b9b3361

Ответ 1

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

Entity entity; //detached

context.AttachTo("entitySetName", entity);
context.DeleteObject(entity);
context.SaveChanges(); //exception

Это сработало для меня.

//get entity from context instead of attaching the "old" one
var newEntity = ctx.Table.Where(w => w.ID == Entity.ID).FirstOrDefault();

context.DeleteObject(newEntity);
context.SaveChanges(); //works

Ответ 2

В нашем случае, если клиентский набор SaveChangesOptions.Batch выбрал это исключение. Установка его на SaveChangesOptions.BatchWithIndependentOperations не выбрасывалась, но мы не можем использовать BatchWithIndependentOperations в нашем сценарии. Надеюсь, это спасет кого-то еще впустую.

Ответ 3

Для тех из вас, кто не использует клиент Microsoft OData, у меня эта проблема исчезла, заставив моего клиента использовать запросы MERGE для обновлений, а не PUT.