2

1 つまたは複数の行を削除しようとすると、「指定されたキャストが無効です」というエラーが表示される非常に単純なテーブルがあります。このテーブルには、主キー (INT) としての "id" と、LINQ to SQL dbml ファイルの文字列にマップされる "name" (VARCHAR(20)) の 2 つの列があります。これらのステートメントはどちらもエラーを生成します。

dc.DeleteOnSubmit(dc.MyTables.Where(Function(x) x.id = 1).SingleOrDefault)
dc.DeleteAllOnSubmit(dc.MyTables)

奇妙なデータがないことを確認するためだけに「MyTable」を反復処理し、行が 2 つしかないことを確認しました。

  • ID = 1、名前 = 「最初」
  • ID = 2、名前 = 「秒」

SubmitChanges で例外が発生しています。スタック トレースは次のとおりです。

[InvalidCastException: Specified cast is not valid.]
   System.Data.Linq.SingleKeyManager`2.TryCreateKeyFromValues(Object[] values, V& v) +59
   System.Data.Linq.IdentityCache`2.Find(Object[] keyValues) +28
   System.Data.Linq.StandardIdentityManager.Find(MetaType type, Object[] keyValues) +23
   System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues) +48
   System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance) +142
   System.Data.Linq.ChangeProcessor.BuildEdgeMaps() +233
   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) +59
   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +331
   System.Data.Linq.DataContext.SubmitChanges() +19
   InpatientCensus.MaintenanceController.DeleteSoleCommunity(Int32 id) in C:\Documents and Settings\gregf\My Documents\Projects\InpatientCensus\InpatientCensus\Controllers\MaintenanceController.vb:14
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +128
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
   System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +52
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +19
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +192
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +399
   System.Web.Mvc.Controller.ExecuteCore() +126
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +27
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +151
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +57
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

DBML ファイルに追加された関連付けを削除すると、行を削除できます。関連付けによってエラーが発生するのはなぜですか? 関連する列は、データベースでは VARCHAR(20) であり、DBML ファイルでは文字列に解決されます。

キャスト エラーの原因として考えられるものは何ですか?

4

3 に答える 3

1

さて、更新を確認すると、問題は 2 つのテーブル間の関連付けです。これは .NET 3.5 SP1 の既知のバグであり、.NET 4.0 で修正される予定です。可能であれば、.NET 4.0 Beta でコードを試してください。

于 2009-07-23T21:03:47.560 に答える
1

整数以外のキーを使用したために、同様の問題が発生しました。詳細とホットフィックス番号はこちら: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=351358

于 2009-09-16T18:00:16.947 に答える
-2

試す:

dc.MyTables.DeleteOnSubmit(dc.MyTables.SingleOrDefault(x=>x.id==1));
dc.MyTables.DeleteAllOnSubmit(dc.MyTables);
于 2009-07-24T04:49:54.160 に答える