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绑定
------解决方案--------------------看不懂