各位:
大家都知道DataRow中有一个属性[RowState],是记录每行的变更状态。
现行若有一个列表ILIST<Customer>中有100条记录当然Ilist<Customer>的实例是可以从数据库中获取到,若期间列表中的Customer有变更过,
如何更好的获取对象的变更状态呢?我的想法是:
1.新增,当然没有问题,初始化时将状态置为ADD,
2.修改时,在每个属性中增加Set{if value!=Field state=state.Modified}
3.默认为UNCHANG问题:
主要是修改的状态,若在每个属性增加SET,则工作量太大了.
大家有没有更好的方法,获取对象实例的修改状态呢?
就像datarow中的Rowstate.代码如下:
public enum State
    {
        /// <summary>
        /// 增加
        /// </summary>
        Added,
        /// <summary>
        /// 修改
        /// </summary>
        Modified,
        /// <summary>
        /// 未变更
        /// </summary>
        Unchanged
    }
    public class Customer
    {
        public State state { get; set; }
        /// <summary>
        /// 标识
        /// </summary>
        public int ID { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public string age { get; set; }
    }

解决方案 »

  1.   

    没事净白日做梦地瞎耽误工夫。如果你的操作跟Customer无关,那么它就跟它无关!例如你可以设计一个public class MyCustomer2
    {
        public Customer obj{get;set;}
        public MyType status{get;set;}
    }或者public class MyList<T>
    {
        public T obj{get;set;}
        public MyType status{get;set;}
    }
    无聊地纠缠原本内聚且合理的业务实体干什么呢?
      

  2.   

    public class MyList<T>    -->  public class MyListItem<T>
      

  3.   

    如果我想知道IList<Customer>中的第5个customer是否有变更,
    以上的方法应该达不到吧。
    你只知道MyList是否有变更,但并不知道其中的内容变更过。我主要的是在数据保存List时,节约时间,比如,若LIST中有500条记录,若只有一条有变化,我只需要保存一条即可。而不需要循环每条记录,由Isession.Save(Customer)去判断。
      

  4.   

    我觉得这个不循环,没办法进行批量处理。
    DataSet的批量更新也只是封装了的,内部也有循环处理的吧。
      

  5.   

    你使用.net adapter保存方法的话 那会自动根据DataRow的[RowState]去判断是否变更或者新增 其他的你是不需要考虑的。
      

  6.   

    如果你非要这么搞,为什么不直接用DATASET呢,处理起来不是更加方便。
      

  7.   

    问题是我用的是NHibernate,不是ADO.NET
      

  8.   

    我认为做这么多的标志着实没有必要,我一般处理是当点击一个单元格进行编辑前,将单元格当前的值保存到TEMP,修改结束后,用修改后的值与TEMP的比较,产生变化,本行ID丢到数组里边。提交后将数组里边ID遍历一遍即可。