C# 使用DataGridView时,更改上下文的正确方法是什么?

C# 使用DataGridView时,更改上下文的正确方法是什么?,c#,entity-framework,datagridview,entity-framework-4,bindingsource,C#,Entity Framework,Datagridview,Entity Framework 4,Bindingsource,我对做这些改变完全感到困惑 假设数据库中有一个表,我们称之为Customers 我们使用实体框架从表中获取数据,如下所示: List customers=context.customers.ToList() 我们还有一个BindingSource,我们使用列表我认为您缺少的一块拼图是数据访问层。 如果在该层中公开上下文,则可以定义一些规则来规范代码 上下文->数据访问层->表示层 通过这种方式,您可以根据需要处理上下文,您可以设计一种方法,以返回现有的完整客户表: List<Custom

我对做这些改变完全感到困惑

假设数据库中有一个表,我们称之为
Customers

我们使用实体框架从表中获取数据,如下所示:
List customers=context.customers.ToList()


我们还有一个
BindingSource
,我们使用
列表我认为您缺少的一块拼图是数据访问层。
如果在该层中公开上下文,则可以定义一些规则来规范代码

上下文->数据访问层->表示层

通过这种方式,您可以根据需要处理上下文,您可以设计一种方法,以返回现有的完整客户表:

 List<Customers> customers = context.Customers.ToList(); 
在最后一种方法中,您可以为操作分配EntityState,并使用:

 if (entity.EntityState == EntityState.Modified || entity.EntityState == EntityState.Deleted) 
 { 
   context.Refresh(RefreshMode.StoreWins, entity); 
 } 
 else if (entity.EntityState == EntityState.Added) 
 {  
   context.Detach(entity); 
 } 
您可以处理上下文刷新


现在只剩下一件事了,那就是决定如何启动表示层(DataGridView)的刷新功能。

我找到了解决方案,它是使用双向数据绑定。这样,当我们从网格中添加、编辑或删除记录时,各方都会得到通知。微软在这里有一个教程,但也有其他方法

 if (entity.EntityState == EntityState.Modified || entity.EntityState == EntityState.Deleted) 
 { 
   context.Refresh(RefreshMode.StoreWins, entity); 
 } 
 else if (entity.EntityState == EntityState.Added) 
 {  
   context.Detach(entity); 
 }