m2011kh
جمعه 26 خرداد 1396, 19:53 عصر
سلام و خسته نباشید دوستان عزیز.
بنده در حال نوشتن یه برنامه کوچیک هستم. شرح مشکل به این صورت هست که من یه تابع استاتیک دارم که هنگام شروع برنامه چک میکنه که آیا جدول هایی که نباید خالی باشن خالی هستن یا نه. و اگه هستن سطر های پیشفرض رو به جدول اضاقه میکنه. بانک اطلاعاتی بوسیله Code first migrations ساخته شده.
این کد تابع :
class DatabaseAufpasser {
public static void DatabaseChecker()
{
using (var _db = new DataContext())
{
if (!_db.KasseGemeinsam.Any())
{
_db.KasseGemeinsam.Add(new Models.Data.KasseGemeinsamModel() { Jahr = DateTime.Now.Year.ToString(), Monat = MonatenVertauchen.ZahlZuMonaten(Convert.ToInt32(Da teTime.Now.Month)), Haushalt = 0, Hygine = 0, Mobel = 0, Nahrung = 0, Schreibware = 0, Sonstiges = 0 });
_db.SaveChanges();
}
if (!_db.KassePrivat.Any())
{
_db.KassePrivat.Add(new Models.Data.KassePrivatModel() { Jahr = DateTime.Now.Year.ToString(), Monat = MonatenVertauchen.ZahlZuMonaten(Convert.ToInt32(Da teTime.Now.Month)), UserID = UserIdentity.UserID, Fahrkosten = 0, Hygine = 0, Mobel = 0, Nahrung = 0, Schreibware = 0, Sonstiges = 0 });
_db.SaveChanges();
}
if (!_db.GemeinsamKasse.Any())
{
_db.GemeinsamKasse.Add(new Models.Data.GemeinsamKasse() { Betrag = 0 });
_db.SaveChanges();
}
if (!_db.PrivatKasse.Any())
{
List<int> userIDs = new List<int>();
foreach (var item in _db.UsersTbl)
{
userIDs.Add(item.ID);
}
using (var _db2 = new DataContext())
{
foreach (var item in userIDs)
{
_db2.PrivatKasse.Add(new Models.Data.PrivatKasse() { BenutzerID = item, Betrag = 0 });
}
_db2.SaveChanges();
}
}
}
}
}
داخل کد میبینید که این تابع روی چهار جدول این تست رو انجام میده. روی سه جدول دیگر کاملا درست کار میکنه با اینکه خصوصیات ID همه چهار جدول رقیقا مثل هم هست ولی وقتی که روی کار در جدول آخر میرسه این خطا رو برمیگردونه:
145515
متن ارور:
System.Data.Entity.Infrastructure.DbUpdateExceptio n ist aufgetreten. HResult=0x80131501
Nachricht = An error occurred while updating the entries. See the inner exception for details.
Quelle = EntityFramework
Stapelüberwachung:
bei System.Data.Entity.Internal.InternalContext.SaveCh anges()
bei System.Data.Entity.Internal.LazyInternalContext.Sa veChanges()
bei System.Data.Entity.DbContext.SaveChanges()
bei MoneyVerwaltung.DatabaseAufpasser.DatabaseChecker( ) in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\DatabaseAufpas ser.cs: Zeile50
bei MoneyVerwaltung.frmHome..ctor() in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\frmHome.cs: Zeile27
bei MoneyVerwaltung.frmAnmeldung.button1_Click(Object sender, EventArgs e) in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\frmAnmeldung.c s: Zeile59
bei MoneyVerwaltung.frmAnmeldung.txtPassword_Keypress( Object sender, KeyPressEventArgs e) in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\frmAnmeldung.c s: Zeile84
bei System.Windows.Forms.Control.OnKeyPress(KeyPressEv entArgs e)
bei System.Windows.Forms.Control.ProcessKeyEventArgs(M essage& m)
bei System.Windows.Forms.Control.ProcessKeyMessage(Mes sage& m)
bei System.Windows.Forms.Control.WmKeyChar(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.TextBoxBase.WndProc(Message& m)
bei System.Windows.Forms.TextBox.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei MoneyVerwaltung.Program.Main() in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\Program.cs: Zeile19
Innere Ausnahme 1:
UpdateException: An error occurred while updating the entries. See the inner exception for details.
Innere Ausnahme 2:
SqlException: Violation of PRIMARY KEY constraint 'PK_dbo.PrivatKasses'. Cannot insert duplicate key in object 'dbo.PrivatKasses'. The duplicate key value is (0).
The statement has been terminated.
دوستان نظر یا راه حلی در مورد این مشکل دارید؟
موفق و سربلند باشید.
بنده در حال نوشتن یه برنامه کوچیک هستم. شرح مشکل به این صورت هست که من یه تابع استاتیک دارم که هنگام شروع برنامه چک میکنه که آیا جدول هایی که نباید خالی باشن خالی هستن یا نه. و اگه هستن سطر های پیشفرض رو به جدول اضاقه میکنه. بانک اطلاعاتی بوسیله Code first migrations ساخته شده.
این کد تابع :
class DatabaseAufpasser {
public static void DatabaseChecker()
{
using (var _db = new DataContext())
{
if (!_db.KasseGemeinsam.Any())
{
_db.KasseGemeinsam.Add(new Models.Data.KasseGemeinsamModel() { Jahr = DateTime.Now.Year.ToString(), Monat = MonatenVertauchen.ZahlZuMonaten(Convert.ToInt32(Da teTime.Now.Month)), Haushalt = 0, Hygine = 0, Mobel = 0, Nahrung = 0, Schreibware = 0, Sonstiges = 0 });
_db.SaveChanges();
}
if (!_db.KassePrivat.Any())
{
_db.KassePrivat.Add(new Models.Data.KassePrivatModel() { Jahr = DateTime.Now.Year.ToString(), Monat = MonatenVertauchen.ZahlZuMonaten(Convert.ToInt32(Da teTime.Now.Month)), UserID = UserIdentity.UserID, Fahrkosten = 0, Hygine = 0, Mobel = 0, Nahrung = 0, Schreibware = 0, Sonstiges = 0 });
_db.SaveChanges();
}
if (!_db.GemeinsamKasse.Any())
{
_db.GemeinsamKasse.Add(new Models.Data.GemeinsamKasse() { Betrag = 0 });
_db.SaveChanges();
}
if (!_db.PrivatKasse.Any())
{
List<int> userIDs = new List<int>();
foreach (var item in _db.UsersTbl)
{
userIDs.Add(item.ID);
}
using (var _db2 = new DataContext())
{
foreach (var item in userIDs)
{
_db2.PrivatKasse.Add(new Models.Data.PrivatKasse() { BenutzerID = item, Betrag = 0 });
}
_db2.SaveChanges();
}
}
}
}
}
داخل کد میبینید که این تابع روی چهار جدول این تست رو انجام میده. روی سه جدول دیگر کاملا درست کار میکنه با اینکه خصوصیات ID همه چهار جدول رقیقا مثل هم هست ولی وقتی که روی کار در جدول آخر میرسه این خطا رو برمیگردونه:
145515
متن ارور:
System.Data.Entity.Infrastructure.DbUpdateExceptio n ist aufgetreten. HResult=0x80131501
Nachricht = An error occurred while updating the entries. See the inner exception for details.
Quelle = EntityFramework
Stapelüberwachung:
bei System.Data.Entity.Internal.InternalContext.SaveCh anges()
bei System.Data.Entity.Internal.LazyInternalContext.Sa veChanges()
bei System.Data.Entity.DbContext.SaveChanges()
bei MoneyVerwaltung.DatabaseAufpasser.DatabaseChecker( ) in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\DatabaseAufpas ser.cs: Zeile50
bei MoneyVerwaltung.frmHome..ctor() in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\frmHome.cs: Zeile27
bei MoneyVerwaltung.frmAnmeldung.button1_Click(Object sender, EventArgs e) in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\frmAnmeldung.c s: Zeile59
bei MoneyVerwaltung.frmAnmeldung.txtPassword_Keypress( Object sender, KeyPressEventArgs e) in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\frmAnmeldung.c s: Zeile84
bei System.Windows.Forms.Control.OnKeyPress(KeyPressEv entArgs e)
bei System.Windows.Forms.Control.ProcessKeyEventArgs(M essage& m)
bei System.Windows.Forms.Control.ProcessKeyMessage(Mes sage& m)
bei System.Windows.Forms.Control.WmKeyChar(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.TextBoxBase.WndProc(Message& m)
bei System.Windows.Forms.TextBox.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei MoneyVerwaltung.Program.Main() in C:\Users\MMD\Documents\Visual Studio 2017\Projects\MoneyVerwaltung 1.0\MoneyVerwaltung\MoneyVerwaltung\Program.cs: Zeile19
Innere Ausnahme 1:
UpdateException: An error occurred while updating the entries. See the inner exception for details.
Innere Ausnahme 2:
SqlException: Violation of PRIMARY KEY constraint 'PK_dbo.PrivatKasses'. Cannot insert duplicate key in object 'dbo.PrivatKasses'. The duplicate key value is (0).
The statement has been terminated.
دوستان نظر یا راه حلی در مورد این مشکل دارید؟
موفق و سربلند باشید.