Winforms 使用数据存储库检测绑定的实体列表中的更改

Winforms 使用数据存储库检测绑定的实体列表中的更改,winforms,entity-framework,data-binding,Winforms,Entity Framework,Data Binding,我有一个使用bindingsource和数据网格的c#winforms应用程序 我正在使用Julie Lerman提供的存储库模式来设置要绑定到网格的数据 patern依赖于实现IEntity接口的实体 public interface IEntity { EntityState State { get; set; } } 当我编辑记录并尝试保存时,我的更改不会被保存,这是因为对绑定实体的更改不会设置IEntity.State属性 我应该如何设置状态属性 设置bindingSource

我有一个使用bindingsource和数据网格的c#winforms应用程序

我正在使用Julie Lerman提供的存储库模式来设置要绑定到网格的数据

patern依赖于实现IEntity接口的实体

public interface IEntity
{
    EntityState State { get; set; }
}
当我编辑记录并尝试保存时,我的更改不会被保存,这是因为对绑定实体的更改不会设置IEntity.State属性

我应该如何设置状态属性

设置bindingSource的代码是

 using (var repo = new PeopleRepository(new OrganisationContext()))
        {
                IList<Person> lst = repo.GetList(p => p.Id > 0 && p.Archived == false, x => x.Organisation);
                bindingSource.datasource = (List<Person>)lst;
        }
使用(var repo=new PeopleRepository(new organizationcontext()))
{
IList lst=repo.GetList(p=>p.Id>0和p.Archived==false,x=>x.org);
bindingSource.datasource=(列表)lst;
}
存储库代码包含

 public virtual IList<T> GetList(Func<T, bool> where, params Expression<Func<T, object>>[] navigationProperties)
    {
        List<T> list;
        IQueryable<T> dbQuery = ((DbContext)this.context).Set<T>();

        //Apply eager loading
        foreach (var navigationProperty in navigationProperties)
        {
            dbQuery = dbQuery.Include(navigationProperty);
        }

         list = dbQuery.AsNoTracking().Where(where).ToList();

        return list;
    }
公共虚拟IList GetList(Func-where,参数表达式[]导航属性)
{
名单;
IQueryable dbQuery=((DbContext)this.context).Set();
//应用即时加载
foreach(navigationProperties中的var navigationProperty)
{
dbQuery=dbQuery.Include(navigationProperty);
}
list=dbQuery.AsNoTracking().Where(Where.ToList();
退货清单;
}
保存时,我调用以下命令,但它不起作用,因为没有设置状态标志

    public void Save(IEnumerable<T> entities)
    {


        if (entities.Count(p => ((IEntity)p).State == EntityState.Added) > 0)
        {
            this.Add(entities.Where(p => ((IEntity)p).State == EntityState.Added).ToArray());
        }

        if (entities.Count(p => ((IEntity)p).State == EntityState.Modified) > 0)
        {
            this.Update(entities.Where(p => ((IEntity)p).State == EntityState.Modified).ToArray());
        }

        if (entities.Count(p => ((IEntity)p).State == EntityState.Deleted) > 0)
        {
            this.Remove(entities.Where(p => ((IEntity)p).State == EntityState.Deleted).ToArray());
        }
    }
public void保存(IEnumerable实体)
{
if(entities.Count(p=>((ienty)p.State==EntityState.Added)>0)
{
Add(entities.Where(p=>((ienty)p).State==EntityState.Added.ToArray());
}
if(entities.Count(p=>((ienty)p.State==EntityState.Modified)>0)
{
this.Update(entities.Where(p=>((ienty)p).State==EntityState.Modified.ToArray());
}
if(entities.Count(p=>((ienty)p.State==EntityState.Deleted)>0)
{
this.Remove(entities.Where(p=>((ienty)p).State==EntityState.Deleted.ToArray());
}
}
[更新]
我正在使用添加和删除按钮的绑定导航器

UI是否修改了
EntityState状态{get;set;}
属性并将其带到存储库?它没有,这就是我想知道的方法。然后,您需要在保存实体之前管理UI上的状态,类似于单击添加按钮时的
{State=Added;}
在编辑单元格时更改{State=Modified;}
在删除按钮上单击右侧轨道上的{State=Deleted;Visible=false;}
…仍在试图找出哪些事件我不确定您在UI中使用了什么以及如何馈送和保存数据,您需要提供有关UI的更多信息