私は単純なデータベースを持っています:
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(Object[] 値、V& v) で System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues) で System. Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType タイプ、Object[] keyValues) で System.Data.Linq.CommonDataServices.GetCachedObject(MetaType タイプ、Object[] keyValues) で System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc) 、オブジェクト インスタンス) System.Data.Linq.ChangeProcessor.BuildEdgeMaps() で System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) で System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) で
System.Data.Linq.DataContext.SubmitChanges() で Driver_SOC_ASO.Controls.PersonalArchive.ArchiveListing.grdArchive_RowDeleting (オブジェクト送信者、GridViewDeleteEventArgs e) で C:\work\Driver.Net\Driver-SOC-ASO\Driver-SOC-ASO \Controls\PersonalArchive\ArchiveListing.ascx.cs: System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e) の 78 行目 System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow 行、Int32 rowIndex) システムでSystem.Web.UI.WebControls.GridView.System.Web の System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) の .Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causeValidation, String validationGroup) System.Web.UI.Page の .UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)。RaisePostBackEvent (IPostBackEventHandler sourceControl、String eventArgument) で System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain で (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint)
私は途方に暮れています、何かアイデアはありますか?