У меня есть болезненно простая таблица, которая дает мне ошибку «Указанный приведение недействительна» при попытке удалить одну или несколько строк. Таблица имеет два столбца, «id» в качестве первичного ключа (INT) и «имя» (VARCHAR (20)), который сопоставляется с строкой в файле dbml LINQ to SQL. Оба эти утверждения производят ошибку:LINQ to SQL delete производящий «Указанный приведение недействителен» ошибка
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.
Что может быть причиной ошибки литья?
Можете ли вы опубликовать трассировку стека исключений? Кроме того, сами ли методы Deletexxx() создают исключение, или это только на SubmitChanges()? –
Есть ли какие-либо внешние ключи, и есть ли у вас какие-либо ассоциации в DBML-файле? – jason
Это происходит на SubmitChanges. В базе данных нет внешних ключей, но я добавил ассоциацию в файле DBML в другую таблицу. Эта таблица является дочерним элементом другой таблицы. – gfrizzle