none
使用Entity FrameWork客户端(winform)更新后数据怎样从客户端回传(没有行状态啊)? RRS feed

  • 问题

  • 如题,以前开发使用DataTable作为传输载体。而今想试一试Entity FrameWork。Entity FrameWork中各表的内容放在DbSet里,当然可以使用ToList()转为List<T>,为绑定的需要,还可用new BindingList(list)转成 BindingList。

    现在问题是这样,比如客户端删除了某些行,提交回来的List里面没有那些行了,如何同步到数据库中呢?

    再就是如果是分布式应用,那么不会跟踪实体类的变化吧,传回的数据如何知道是新增还是更改了呢?

    难道要写一个实体的基础类?设置行状态?

    请指教,谢谢!


    陈锦巍

    2019年5月2日 6:38

全部回复

  • Hi,

    你可以尝试使用EF中的DataBase First,并参考以下代码实现相关数据的删除。

        MyTest2Entities mt = new MyTest2Entities();
    
        SClass sc = new SClass();
        sc.Id = 2;
    
        mt.SClasses.Attach(sc);
        mt.Entry(sc).State = System.Data.Entity.EntityState.Deleted;
        mt.SaveChanges();

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年5月2日 9:55
  • 不是什么优先的事,我是想问,实体数据如何在客户端与商务逻辑层间传输?

    如以前用datatable,DataTable里有行状态的,所以传回的话对应的Adapter会正确执行(增删改)。

    而实体数据,只能用List之类的包装一个集合带到客户端,显示没有问题,在非分布式框架下有自跟踪,更改数据,可以看到回传的实体状态为Modified,新增数据看到的是UnChanged。而删除数据呢?难道是要提交一个请求(删除某实体数据),让商务逻辑层去执行删除?如果成功,则客户端的List再去掉相关数据?

    目前暂时是按上面做的。可是,如果在分布式框架中呢?例如用Remoting,我想这时把实体数据传到客户端,等于是断开了(Deteched)吧,不会自跟踪数据了。那这样怎么再实现增删改呢?


    陈锦巍

    2019年5月2日 11:19
  • Hi,

    很抱歉这个论坛只讨论一般的.Net开发的问题,不对具体的框架进行讨论,感谢你的理解。

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年5月7日 2:37
  • 在ef里dbcontext其实是跟踪记录状态的,不过不是在List<T>里面,集合里的对象就是个普通的平面类,当然没行状态。

    真正跟踪靠的是dbcontext.changetracker,这里面包含所有被跟踪对象的状态信息,包括删除的对象。

    2019年6月8日 6:54
  • 哦,这样啊,那么我想问一下,如果在分布式应用中使用实体类,就无法自跟踪了吧?还能用实体类吗?如果不能自跟踪,如何获取“行状态”呢?

    陈锦巍

    2019年6月8日 10:18