Если вы работаете с подключенными объектами, задание прост, вы можете загружать данные в контекст, а затем привязывать данные к сетке и манипулировать данными и последним вызовом SaveChanges
контекста, в котором вы загружали данные, применять изменения к база данных.
Если вы работаете с отключенными объектами, вы должны отслеживать изменения сущностей. Некоторые из ваших сущностей добавлены, некоторые из них изменены, а некоторые из них удалены. И вы хотите вставить эти добавленные объекты и обновить эти измененные сущности и удалить эти удаленные объекты из контекста. Для этого вы можете наследовать от BindigList<T>
или или использовать BindingSource
и прослушивать список изменений событий и отслеживать изменения и сохранять изменения в 3 отдельных списках (добавленные, измененные, удаленные), а затем передавать эти списки на сервер для применения изменений ,
Образец для Connected лиц:
SampleDbContext db;
private void Form1_Load(object sender, EventArgs e)
{
db = new SampleDbContext();
db.Products.Load();
this.productDataGridView.DataSource = db.Products.Local.ToBindingList();
}
private void SaveButton_Click(object sender, EventArgs e)
{
this.productDataGridView.EndEdit();
db.SaveChanges();
}
Образец для Disconnected лиц:
Я полагаю, вы проследили изменения с помощью BindingSource
или BindingList<T>
или ObservableCollection<T>
или даже с помощью DataGridView
событий или что-то другое. Теперь вы должны быть добавлены, редактировать и удалять объекты, и вы можете передать их в код сервера, чтобы применить изменения таким образом:
public void SaveChanges(List<Product> added, List<Product> edited, List<Product> deleted)
{
using (var db = new SampleDbContext())
{
foreach (var entity in deleted)
{
if (edited.Contains(entity))
edited.Remove(entity);
if (added.Contains(entity))
added.Remove(entity);
else
db.Entry(entity).State = EntityState.Deleted;
}
foreach (var entity in added)
{
if (edited.Contains(entity))
edited.Remove(entity);
db.Entry(entity).State = EntityState.Added;
}
foreach (var entity in edited)
db.Entry(entity).State = EntityState.Modified;
db.SaveChanges();
}
}
Если вы работаете с отключенными лицами, вы должны отслеживать изменения сущности. Некоторые из ваших сущностей добавлены, некоторые из них изменены, а некоторые из них удалены. И вы хотите вставить эти добавленные объекты и обновить эти измененные сущности и удалить эти удаленные объекты из контекста. –
@RezaAghaei Это называется отключенным сценарием? –
Если вы получаете данные с помощью службы и у вас нет доступа к контексту, из которого вы получаете данные, то это отключается. Например, в связанном сценарии вы создаете экземпляр контекста в своей форме и получаете данные и обрабатываете данные, а затем сохраняете изменения в контексте. –