日期:2014-05-20  浏览次数:20842 次

3层架构时,linq的update的好办法
我不知道你们在3层架构的是如何update的,通常的方法

在ui层里,
var model = new Student();
model.Name = this.TextBoxStudent.Text.Trim();
model.Email= ……
model.Pwd = ……
model.Age = ……
model.Address = ……
model.Phone = ……
model.Grade = ……
model.Class = ……
model.Number = ……
……

然后在bll层里
把这些继续赋值一次
var newModel = 从linq里根据id得到那个实体。
newModel .Name = model.Name;
newModel .Email= model.Email;
newModel .Pwd = model.Pwd ;
newModel .Age = model.Age ;
newModel .Address = model.Address ;
newModel .Phone = model.Phone ;
newModel .Grade = model.Grade ;
newModel .Class = model.Class ;
newModel .Number = model.Number ;
// 如果属性有20个,你就需要ui里赋值20次,在bll里赋值也是20次。
如果属性有50个,那同样,这样就造成很冗余的代码了。
有个好办法解决。

bll里加一句
var setter = this.DCT.GetTable<tb_Know>().Where(o => o.ID == getter.ID).FirstOrDefault();
LinqHelp.CopyObjectProperty<tb_Know>(getter, setter);//加上这一句就ok了,内部代码请看下边
this.DCT.SubmitChanges();

 public class LinqHelp
  {
  public static void CopyObjectProperty<T>(T getter, T setter) where T : class
  {
  //获得所有property的信息
  PropertyInfo[] properties = getter.GetType().GetProperties();

  object value = null;
  foreach (PropertyInfo p in properties)
  {
  value = p.GetValue(getter, null);
  if (value != null)
  {
  p.SetValue(setter, value, null);//设置tDestination的属性值
  }
  }
  }
  }
就ok了,呵呵,不知道我说清楚了没有。有问题就跟帖吧。


------解决方案--------------------
来学习的

------解决方案--------------------
最好的办法就是使用 ALinq 啦。
------解决方案--------------------
MVC里UpdateModel就可以了
------解决方案--------------------
使用数据绑定不存在此问题,特别是WPF和Silverlight中的TwoWay绑定
------解决方案--------------------
看不懂