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

C# 正在使用外键删除LINQ中的记录-无效强制转换异常,c#,sql,linq,delete-row,C#,Sql,Linq,Delete Row,我有一个简单的数据库: ARTICLE ---------- ArticleId (PK), ArticleTitle ..other stuff... USER-ARTICLE ------------ ArchiveId (PK), UserId, ArticleId ..other stuff... articleId是外键 我希望能够使用以下代码通过UserArticleId删除用户文章行 UserArticle myobjtodelete = PersonalArchiveDb.U

我有一个简单的数据库:

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();
(是的,我知道我可以在delete中执行语句,而不是检索对象,这是为了调试目的,以确保对象确实存在—确实存在。)

当调试器点击
SubmitChanges()
行时,我得到一个运行时错误:

指定的强制转换无效

这是堆栈跟踪

位于System.Data.Linq.IdentityManager .StandardIdentityManager .SingleKeyManager`2.TryCreateKeyFromValues(对象[]值,V&V)位于 System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(对象[] 关键字值)在 System.Data.Linq.IdentityManager.StandardIdentityManager.Find(元类型 类型,对象[]键值)位于 System.Data.Linq.CommonDataServices.GetCachedObject(元类型, 对象[]键值)位于 System.Data.Linq.ChangeProcessor.GetOtherItem(元关联关联), 对象实例)在 System.Data.Linq.ChangeProcessor.BuildEdgeMaps()位于 System.Data.Linq.ChangeProcessor.SubmitChanges(冲突模式 故障模式)在 System.Data.Linq.DataContext.SubmitChanges(冲突模式故障模式)
位于System.Data.Linq.DataContext.SubmitChanges()处 驱动程序\u SOC\u ASO.Controls.PersonalArchive.ArchiveListing.grdArchive\u行删除(对象 发件人,GridViewDeleteEventArgs)位于 C:\work\Driver.Net\Driver SOC ASO\Driver SOC ASO\Controls\PersonalArchive\ArchiveListing.ascx.cs:line 78 at System.Web.UI.WebControl.GridView.OnRowDeleteing(GridViewDeleteEventArgs e) 在System.Web.UI.WebControl.GridView.HandleDelete(GridViewRow)中 行,Int32行索引)位于 System.Web.UI.WebControl.GridView.HandleEvent(EventArgs e,布尔值 原因验证,字符串验证组)位于 System.Web.UI.WebControl.GridView.RaisePostBackEvent(字符串 事件参数)在 System.Web.UI.WebControl.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 事件参数)在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)位于 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
位于System.Web.UI.Page.ProcessRequestMain(布尔值 IncludeStages前同步点,布尔值IncludeStages后同步点)


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

试着为
ArticleId

设置级联删除,这可能就是一个例子,微软说它在.NET 4.0中是固定的。

在你的dbml中,检查是否有不正确的关联b/w Article和UserArticle。

你的示例代码使用“ArchiveId”而不是“ArticleId”-在您最初的描述中,您是指“归档”而不是“文章”?是的,对不起,这里有UserArticleId==ArchiveId,我知道将编辑糟糕的命名