#c# #entity-framework #insert #sql-server-ce
#c# #entity-framework #вставить #sql-server-ce
Вопрос:
Я сгенерировал модель из этой базы данных:
[ID] int IDENTITY (1,1) NOT NULL
, [Prenume] nvarchar(100) NULL
, [Nume] nvarchar(100) NULL
ALTER TABLE [voluntari] ADD CONSTRAINT [PK_voluntari] PRIMARY KEY ([ID]);
GO
CREATE UNIQUE INDEX [UQ__voluntari__0000000000000042] ON [voluntari] ([NrLeg] ASC);
GO
Созданный класс является:
public partial class voluntari
{
public int ID { get; set; }
public string Prenume { get; set; }
public string Nume { get; set; }
}
и
public partial class ValuntariEntities : DbContext
{
public ValuntariEntities()
: base("name=ValuntariEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<voluntari> voluntaris { get; set; }
}
Код, используемый для вставки объекта в базу данных, является:
Gestiune_Voluntari.ValuntariEntities ve = new ValuntariEntities();
voluntari v = new voluntari();
v.Nume = "Ion";
v.Prenume = "ion";
ve.voluntaris.Add(v);
ve.SaveChanges();
В таблицу базы данных я могу вставить только один объект. Если я запускаю приведенный выше код, он работает только один раз, если я пытаюсь вставить другие значения, не работает, я получаю эту ошибку:
An error occurred while updating the entries. See the inner exception for details.
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
at System.Data.Entity.DbContext.SaveChanges()
at Gestiune_Voluntari.MainWindow.Button_Click(Object sender, RoutedEventArgs e) in c:UsersFlorinDocumentsProiecte programareGestiunevoluntariGestiune VoluntariGestiune VoluntariMainWindow.xaml.cs:line 35
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.RaiseEvent(RoutedEventArgs e)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
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.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
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, Booleanamp; handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Booleanamp; handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Booleanamp; 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(MSGamp; 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 Gestiune_Voluntari.App.Main() in c:UsersFlorinDocumentsProiecte programareGestiunevoluntariGestiune VoluntariGestiune VoluntariobjDebugApp.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()
Внутреннее исключение:
A duplicate value cannot be inserted into a unique index. [ Table name = voluntari,Constraint name = UQ__voluntari__0000000000000042 ]
источником является:
SQL Server Compact ADO.NET Data Provider
Это не сработает, даже если я вручную укажу идентификатор для объекта, который не используется в таблице. Единственный случай, когда это работает, — это когда таблица пуста.
Спасибо!
ОБНОВЛЕНИЕ: Проблема заключалась в другом столбце, который был настроен как уникальный ключ. Я забыл об этом.
Комментарии:
1. Пожалуйста, покажите всю таблицу и свойство NrLeg. Почему он не отображается в entity? Это основная информация для ответа на этот вопрос.
Ответ №1:
Я полагаю, что проблема связана с вашей базой данных из-за этой строки:
[ID] int IDENTITY (1,1) NOT NULL
Я бы ожидал, что это будет:
[ID] int IDENTITY
С помощью (1,1)
вы могли бы вызывать идентификатор (функцию) вместо свойства IDENTITY