Ошибка «указанное приведение неверно» при сохранении сущности LINQ-To-SQL - PullRequest
5 голосов
/ 26 января 2011

Сведения о приложении: C #, ASP.NET MVC, SQL Server 2008 (та же версия и уровень SP), Linq-To-SQL ORM

Я пытаюсь диагностировать полученное исключение:

"Указанное приведение недействительно."в System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManage`2.TryCreateKeyFromValues ​​(Object [] values, V & v)
в System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityalF).
в System.Data.Linq.IdentityManager.StandardIdentityManager.Find (тип MetaType, Object [] keyValues)
в System.Data.Linq.CommonDataServices.GetCachedObject (тип MetaType, Object [] keyValues ​​at 100) * 100System.Data.Linq.ChangeProcessor.GetOtherItem (ассоциация MetaAssociation, экземпляр объекта)
в System.Data.Linq.ChangeProcessor.BuildEdgeMaps ()
в System.Data.Linq.ChangeProcessor.SubmitChanges (сбой ConflictMode2)* в System.Data.Linq.DataContext.SubmitChanges (ConflictMode faultMode)
в System.Data.Linq.DataContext.SubmitChanges ()
в Repository.Save () в etc ....

Проблема в том, что это происходит только на наших серверах, а не на наших локальных блоках разработки.Я отследил его до одного свойства, которое мы модифицируем:

event.SalesForceId = "701Q0000000AOTIIA4";

Если я закомментирую эту строку, все будет работать нормально.

Я пробовал:

1) копирование всего кода на сервере и повторное развертывание.Та же проблема.
2) Вытащить копию серверной БД и попробовать ее локально.Работает нормально.
3) Попробовав другую среду IIS, мы установили на тот же ящик.Та же проблема.
4) Физическое сравнение (с использованием AdeptSQL) как локальной, так и удаленной схем.Нет различий.
5) Проверка типов данных обоих столбцов (локальных и удаленных) одинаковы.Кроме того, этот столбец FK для другой таблицы.Я проверил, что оба имеют один и тот же тип данных, вплоть до сопоставления.

Сервер - Windows Server 2008, а локальный ящик - Windows 7 x64.Оба имеют все важные настройки обновлений.

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

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 26 января 2011

Это известная ошибка в LINQ to SQL.

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=351358

Существует исправление для этой проблемы.

http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=963657&kbln=en-us

1 голос
/ 26 января 2011

Если этот ключ существует в определенных отношениях и , объект уже создан, то необходимо использовать предоставленный LINQ путь отношения (obj.Foo = new Foo { ... }) .(Я бы использовал предоставленные отношения даже для новых объектов).Невыполнение этого приведет, если судить по опыту, к «случайным» ошибкам, подобным этому.

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

Удачный прыжок с SQL-на-LINQ.*

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