我只是发现LINQ并发现它很棒。一个问题是,在3层(层)应用程序的更新过程中,我必须复制很多字段。我使用的算法显示了类的典型LINQ更新。
FromPresentation。以及相应的代码:
using (var ctx = new AppDataDataContext())
{
var OBJ =
(from Usu in ctx.usuarios
where Usu.ID == FromPresentation.ID
select Usu).SingleOrDefault();
if (OBJ != null)
{
OBJ.Nome = FromPresentation.Nome;
OBJ.NomeCurto = FromPresentation.NomeCurto;
OBJ.Login = FromPresentation.Login;
OBJ.Senha = FromPresentation.Senha;
OBJ.SuperUsuario = FromPresentation.SuperUsuario;
OBJ.Ativo = FromPresentation.Ativo;
// a lot more fields
ctx.SubmitChanges();
return OBJ.ID;
}
}问题是我有很多领域。我甚至尝试使用反射(用这个问题作指导)复制字段,但是LINQ没有收到更改通知,因此不会保存任何内容。
如何使用反射将值复制到LINQ对象,以便在数据库中更新?
发布于 2011-07-22 23:06:30
不要为此使用反射,这将是重新发明车轮-使用像AutoMapper这样的映射器来为您工作。
AutoMapper使用fluent配置API来定义对象-对象映射策略。AutoMapper使用基于约定的匹配算法来匹配源值和目标值.目前,AutoMapper面向模型投影场景,将复杂的对象模型简化为DTO和其他简单对象,这些对象的设计更适合于序列化、通信、消息传递,或者只是域层和应用层之间的反损坏层。
发布于 2011-07-23 16:42:22
您可以尝试更新属性,而不是字段。
例如
private static void UpdateForType(Type type, MyObject source, MyObject destination)
{
var myObjectProperties = type.GetProperties(
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo pi in myObjectProperties)
pi.SetValue(destination, pi.GetValue(source, null), null);
} https://stackoverflow.com/questions/6797013
复制相似问题