首页 新闻 会员 周边 捐助

ORM更新问题

0
悬赏园豆:30 [已解决问题] 解决于 2009-06-13 10:28

怎样根据已经赋过值的属性来更新表中的字段值(没赋过值的不更新),举个例子:
public Class Test
{
  public String Name{get;set;}
  public Int Pwd{get;set;}
}
Test model=new Test()
model.Name="aaa";
ORM.Update(model);

这样更新的话就不需要更新pwd,只更新Name,请问大家都有些什么思路,给我指点指点..谢谢

这里,实体属性跟表结构是一样的!

问题补充: 或者,有没有什么方法能判断一个变量的值是默认值还是被赋过值,比如int默认值是0,但有时我也可能将它赋值为0,请知道能告诉我,谢谢! 给个思路给我....停在这里没法动了..
隔山打牛的主页 隔山打牛 | 初学一级 | 园豆:87
提问于:2009-06-10 15:46
< >
分享
最佳答案
0

自己做ORM太麻烦了吧,这种功能已经有很多很好的ORM实现了,推荐还是用Entity Framework吧。

可空类型也不是很好用,只是用于新建,如是用于更改呢?那就不太适用了吧。

比较规范的思路是将类实现INotifyPropertyChanged接口,该接口规定了一个PropertyChanged事件,用于提交更改通知:

        #region 实现INotifyPropertyChanged

        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

然后属性都这么写:

        public int Age
        {
            get
            {
                return _Age;
            }
            set
            {
                _Age = value;
                OnPropertyChanged("Age");
            }
        }
        private int _Age;

然后你就修改OnPropertyChanged函数吧,在那里面实现修改记录功能就行。

你还需要注意在从数据库读取时应当直接给字段(比如_Age)赋值,而不是直接赋值于属性,这样会引发OnPropertyChanged~

建议实施前可以先看看INotifyPropertyChanged接口的相关资料。

另外,INotifyPropertyChanged接口在WinForm及WPF的数据绑定中经常需要用到,实现了就算一举两得了。

斯克迪亚 | 老鸟四级 |园豆:4124 | 2009-06-10 22:12
其他回答(1)
0

可以判断一下是否null,你可以发现很多数据类型都是诸如int?的,可以与null比较,如果是null的话就没有赋值.

xAppDev | 园豆:230 (菜鸟二级) | 2009-06-10 18:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册