مشکل ذخیره ردیف جدید datagrid در دیتابیس
سلام یک سوال داشتم یک دیتابیس دارم که اطلاعاتشو در دیتاگرید نشون میدم. کلاس جدولم اینطوریه
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 هیچی ذخیره نمیشه.باید چیکار کنم تا بتونم این رو حل کنم ؟
نقل قول: مشکل ذخیره ردیف جدید datagrid در دیتابیس
احتمالاً دلیلی که تغییرات شما در دیتاگرید در دیتابیس ذخیره نمیشود، این است که شما به صورت پیشفرض از Entity Framework استفاده میکنید ولی مدیریت تراکنشها به صورت دستی انجام نشده است. بنابراین، تغییرات شما در دیتاگرید در یک تراکنش جداگانه ذخیره نمیشود و در نتیجه در دیتابیس نیز ذخیره نمیشود.برای حل این مشکل، میتوانید از یک تراکنش جدید برای ذخیره تغییرات استفاده کنید. برای این کار، کد زیر را به کد خود اضافه کنید:
using (var transaction = db.Database.BeginTransaction()){
try
{
db.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
// handle exception
}
}