PDA

View Full Version : مشکل ذخیره ردیف جدید datagrid در دیتابیس



fatemeh_yagobi
سه شنبه 09 اسفند 1401, 16:59 عصر
سلام یک سوال داشتم یک دیتابیس دارم که اطلاعاتشو در دیتاگرید نشون میدم. کلاس جدولم اینطوریه

public class Contacts : INotifyPropertyChanged
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity )]
public int id { get; set; }

private string _firstName;
private string _lastName;
public string FirstName
{
set
{
_firstName = value;
if (PropertyChanged == null) return;
onPropertyChanged("FirstName");
}
get { return _firstName; }
}
public string LastName
{
set
{
_lastName = value;
if (PropertyChanged == null) return;
onPropertyChanged("LastName");
}
get { return _lastName; }
}

public event PropertyChangedEventHandler PropertyChanged;

private void onPropertyChanged(string propertyName)
{
if (PropertyChanged == null) return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

داخل فرم هم اینطوری در دیتاگرید استفاده میکنم
public ObservableCollection<Contacts> contacts { get; set; }



DbMainContext db = new DbMainContext();


contacts = new ObservableCollection<Contacts>(db.Contacts.ToList());
dataGrid_1.ItemsSource = contacts;

دیتاگریدم رو بصورت دستی وقتی داخل سطرها و سلول هاش تغییری در مقدارشون میدم اینطوری اونو ذخیره میکنم و در دیتابیسم ذخیره میشه

db.SaveChanges();


الان دیتاگریدم درحالت CanUserAddRows="True" هست و وقتی با کلیک روی دیتاگرید سطر جدید اضافه میشه بعد سلول های سطر جدید را داخلش مقداری مینویسم میخوام این سطر هم در دیتاگریدم ذخیره بشه ولی db.SaveChanges هیچی ذخیره نمیشه.باید چیکار کنم تا بتونم این رو حل کنم ؟

پرستو پارسایی
پنج شنبه 31 فروردین 1402, 11:38 صبح
احتمالاً دلیلی که تغییرات شما در دیتاگرید در دیتابیس ذخیره نمی‌شود، این است که شما به صورت پیش‌فرض از Entity Framework استفاده می‌کنید ولی مدیریت تراکنش‌ها به صورت دستی انجام نشده است. بنابراین، تغییرات شما در دیتاگرید در یک تراکنش جداگانه ذخیره نمی‌شود و در نتیجه در دیتابیس نیز ذخیره نمی‌شود.برای حل این مشکل، می‌توانید از یک تراکنش جدید برای ذخیره تغییرات استفاده کنید. برای این کار، کد زیر را به کد خود اضافه کنید:

using (var transaction = db.Database.BeginTransaction()){
try
{
db.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
// handle exception
}

}