一个简单的对象问题

duanzhi1984 2013-05-05 10:40:36
各位:
大家都知道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; }
}
...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Code従業員 2013-05-07
  • 打赏
  • 举报
回复
我认为做这么多的标志着实没有必要,我一般处理是当点击一个单元格进行编辑前,将单元格当前的值保存到TEMP,修改结束后,用修改后的值与TEMP的比较,产生变化,本行ID丢到数组里边。 提交后将数组里边ID遍历一遍即可。
wxl1010 2013-05-06
  • 打赏
  • 举报
回复
如果你非要这么搞,为什么不直接用DATASET呢,处理起来不是更加方便。
duanzhi1984 2013-05-06
  • 打赏
  • 举报
回复
引用 7 楼 wxl1010 的回复:
如果你非要这么搞,为什么不直接用DATASET呢,处理起来不是更加方便。
问题是我用的是NHibernate,不是ADO.NET
天下如山 2013-05-06
  • 打赏
  • 举报
回复
你使用.net adapter保存方法的话 那会自动根据DataRow的[RowState]去判断是否变更或者新增 其他的你是不需要考虑的。
狼烟辉 2013-05-06
  • 打赏
  • 举报
回复
我觉得这个不循环,没办法进行批量处理。 DataSet的批量更新也只是封装了的,内部也有循环处理的吧。
duanzhi1984 2013-05-06
  • 打赏
  • 举报
回复
有人在吗? 顶下。
duanzhi1984 2013-05-05
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
没事净白日做梦地瞎耽误工夫。 如果你的操作跟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;}
}
无聊地纠缠原本内聚且合理的业务实体干什么呢?
如果我想知道IList<Customer>中的第5个customer是否有变更, 以上的方法应该达不到吧。 你只知道MyList是否有变更,但并不知道其中的内容变更过。 我主要的是在数据保存List时,节约时间,比如,若LIST中有500条记录,若只有一条有变化,我只需要保存一条即可。而不需要循环每条记录,由Isession.Save(Customer)去判断。
  • 打赏
  • 举报
回复
public class MyList<T> --> public class MyListItem<T>
  • 打赏
  • 举报
回复
没事净白日做梦地瞎耽误工夫。 如果你的操作跟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;}
}
无聊地纠缠原本内聚且合理的业务实体干什么呢?

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧