2009-07-23 24 views
2

當我試圖刪除一行或多行時,我得到一個非常簡單的表,它給了我一個「指定的強制轉換無效」錯誤。該表有兩列,一個是作爲主鍵(INT)的「id」,另一個是「name」(VARCHAR(20)),映射到LINQ to SQL dbml文件中的字符串。這兩個語句產生錯誤:LINQ to SQL刪除產生「指定的強制轉換無效」錯誤

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

我通過「MyTable的」迭代只是爲了確保沒有怪異的數據,而且只有兩行:

  • 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文件中的字符串。

什麼可能導致鑄造錯誤?

+1

您可以發佈異常堆棧跟蹤嗎?另外,Deletexxx()方法本身是否產生異常,還是僅在SubmitChanges()? – 2009-07-23 21:06:29

+1

是否有任何外鍵,並且在DBML文件中是否有任何關聯? – jason 2009-07-24 03:23:19

+0

這發生在SubmitChanges上。數據庫中沒有外鍵,但是我在DBML文件中添加了一個關聯到另一個表。這張桌子是另一張桌子的孩子。 – gfrizzle 2009-07-24 13:04:55

回答

1

好的,看到更新後,問題是你的兩個表之間的關聯。這是.NET 3.5 SP1中已知的bug,將在.NET 4.0中修復。如果可以,請嘗試.NET 4.0 Beta上的代碼。

-2

嘗試:

dc.MyTables.DeleteOnSubmit(dc.MyTables.SingleOrDefault(x=>x.id==1)); 
dc.MyTables.DeleteAllOnSubmit(dc.MyTables); 
相關問題