Удаление записей в LINQ с внешними ключами - недопустимое исключение приведения - PullRequest
3 голосов
/ 05 ноября 2008

У меня есть простая база данных:

ARTICLE
----------
ArticleId (PK),
ArticleTitle
..other stuff...

USER-ARTICLE
------------
ArchiveId (PK),
UserId,
ArticleId
..other stuff...

articleId - это внешние ключи.

Я хочу иметь возможность удалить строку статьи пользователя с помощью UserArticleId, используя следующий код,

UserArticle myobjtodelete = PersonalArchiveDb.UserArticles.Single(ua => ua.ArchiveId == 3);
PersonalArchiveDb.UserArticles.DeleteOnSubmit(myobjtodelete);
PersonalArchiveDb.SubmitChanges();

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

Когда отладчик попадает в строку SubmitChanges(), я получаю ошибку времени выполнения:

Указанный состав недействителен.

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

в System.Data.Linq.IdentityManager .StandardIdentityManager .SingleKeyManager`2.TryCreateKeyFromValues ​​(значения объекта [], V & v) в System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find (Object [] keyValues) в System.Data.Linq.IdentityManager.StandardIdentityManager.Find (метатип тип, Object [] keyValues) в System.Data.Linq.CommonDataServices.GetCachedObject (тип MetaType, Object [] keyValues) в System.Data.Linq.ChangeProcessor.GetOtherItem (ассоциация MetaAssociation, Экземпляр объекта) в System.Data.Linq.ChangeProcessor.BuildEdgeMaps () в System.Data.Linq.ChangeProcessor.SubmitChanges (ConflictMode faultMode) в System.Data.Linq.DataContext.SubmitChanges (ConflictMode faultMode)
в System.Data.Linq.DataContext.SubmitChanges () в Driver_SOC_ASO.Controls.PersonalArchive.ArchiveListing.grdArchive_RowDeleting (Объект отправитель, GridViewDeleteEventArgs e) в C: \ работа \ Driver.Net \ Driver-SOC-ASO \ Driver-SOC-ASO \ Controls \ PersonalArchive \ ArchiveListing.ascx.cs: линия 78 в System.Web.UI.WebControls.GridView.OnRowDeleting (GridViewDeleteEventArgs e) в System.Web.UI.WebControls.GridView.HandleDelete (GridViewRow row, Int32 rowIndex) в System.Web.UI.WebControls.GridView.HandleEvent (EventArgs e, Boolean reasonValidation, String validationGroup) в System.Web.UI.WebControls.GridView.RaisePostBackEvent (String eventArgument) в System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) в System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler sourceControl, String eventArgument) в System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint)

Я в недоумении, есть идеи?

Ответы [ 3 ]

1 голос
/ 04 июня 2009

Это может быть примером этой ошибки , которая, по словам Microsoft, исправлена ​​в .NET 4.0.

0 голосов
/ 11 марта 2010

В вашем dbml проверьте, нет ли неправильной связи между ч / б Article и UserArticle.

0 голосов
/ 05 апреля 2009

попробуйте установить ON CASCADE DELETE для ArticleId

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