我無法更新當我更改我的表中的某個字段。實體框架更新
- 數據庫==> mysql的
- .NET框架==> 4.0
- 平臺==> WPF應用程序
讓我一步一步講解
我的目標是更新表中已經存在的項目。
public bool SaveToVideoInfo(List<tblvideoinfo> vList,sbyte profilID)
{
foreach (tblvideoinfo _videoinfo in vList)
{
try
{
ent.AddTotblvideoinfo(_videoinfo);
ent.AddTotblprocess(CreateProcess(profilID,_videoinfo.VideoID));
ent.SaveChanges();
}
catch (UpdateException)
{
return UpdateToVideoInfo(_videoinfo);
}
}
return false;
}
如果在表中存在已經項,我趕上這個例外,並打電話給我更新功能
public bool UpdateToVideoInfo(tblvideoinfo vInfo)
{
var updatingItem = (from a in ent.tblvideoinfo
where a.VideoID == vInfo.VideoID
select a).First();
updatingItem.SearchKeywords = vInfo.SearchKeywords;
updatingItem.SearchTimeStamp = DateTime.Now;
return ent.SaveChanges() > 0;
}
因爲如果在表中存在,我想改變一些領域如我上面寫的。一切都很好,直到運行ent.SaveChanges()
我檢查updatingItem已經改變了我設置的屬性(SearchKeywords,SearchTimeStamp)
但出現此錯誤,同時更新條目中出現
錯誤。詳情請參閱
內部異常下面是詳細介紹
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Objects.ObjectContext.SaveChanges()
at MyDbHelper.DBHelper.UpdateToVideoInfo(tblvideoinfo vInfo)
at MyDbHelper.DBHelper.SaveToVideoInfo(List`1 vList, SByte profilID)
at youtube.MainWindow.p_Drop_Event(Object sender, Object to) in C:\Users\xxxxxx....\...\MainWindow.xaml.cs:line 1125
at youtube.product.UserControl_MouseUp(Object sender, MouseButtonEventArgs e) in C:\Users\xxxxxx....\...\product.xaml.cs:line 239
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at youtube.App.Main() in C:\Users\xxxxxx....\...\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
這裏updatingItem
的詳細手段,
updatingItem.SearchKeywords = vInfo.SearchKeywords;
updatingItem.SearchTimeStamp = DateTime.Now;
這些代碼是工作。
與此同時,VideoID是唯一在我的表然後我不能添加具有相同VideoID的項目。但我想更新它。我認爲更新問題來自這裏。
我不想使用sql命令。
我只是想更新表的兩個領域...
什麼是內部異常的描述? – 2012-08-16 13:10:11
我已經在那裏寫下「這裏是詳細信息」 – unbalanced 2012-08-16 13:11:06
這是堆棧跟蹤不是說明 – 2012-08-16 13:17:22