使用外键删除LINQ中的记录 - 无效的强制转换异常

时间:2008-11-05 11:09:28

标签: c# sql linq delete-row

我有一个简单的数据库:

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(Object []值,V& v)at   System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(对象[]   keyValues)at   System.Data.Linq.IdentityManager.StandardIdentityManager.Find(元类型   type,Object [] keyValues)at   System.Data.Linq.CommonDataServices.GetCachedObject(MetaType类型,   Object [] keyValues)at   System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc,   对象实例)在   System.Data.Linq.ChangeProcessor.BuildEdgeMaps()at   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode   failureMode)at   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
  在System.Data.Linq.DataContext.SubmitChanges()at   Driver_SOC_ASO.Controls.PersonalArchive.ArchiveListing.grdArchive_RowDeleting(对象   发件人,GridViewDeleteEventArgs e)in   C:\工作\ Driver.Net \驱动-SOC-ASO \驱动-SOC-ASO \控制\ PersonalArchive \ ArchiveListing.ascx.cs:行   78点   System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs   e)在System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow   row,Int32 rowIndex)at   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,Boolean   causeValidation,String validationGroup)at   System.Web.UI.WebControls.GridView.RaisePostBackEvent(字符串   eventArgument)at   System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串   eventArgument)at   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler   sourceControl,String eventArgument)at   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  在System.Web.UI.Page.ProcessRequestMain(布尔值   includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)

我不知所措,有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这可能就是这个bug的一个例子,微软称这是在.NET 4.0中修复的。

答案 1 :(得分:0)

尝试为ArticleId

设置ON CASCADE DELETE

答案 2 :(得分:0)

在您的dbml中,检查是否存在与文章和用户文章不正确的关联。