首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用反射更新数据库中的许多字段

使用反射更新数据库中的许多字段
EN

Stack Overflow用户
提问于 2011-07-22 23:04:03
回答 2查看 759关注 0票数 0

我只是发现LINQ并发现它很棒。一个问题是,在3层(层)应用程序的更新过程中,我必须复制很多字段。我使用的算法显示了类的典型LINQ更新。

  1. 我从表示层接收对象FromPresentation
  2. 我使用LINQ从数据库获取具有相同ID的对象。
  3. 我改变了很多领域
  4. 保存更改。

以及相应的代码:

代码语言:javascript
复制
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对象,以便在数据库中更新?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-22 23:06:30

不要为此使用反射,这将是重新发明车轮-使用像AutoMapper这样的映射器来为您工作。

AutoMapper使用fluent配置API来定义对象-对象映射策略。AutoMapper使用基于约定的匹配算法来匹配源值和目标值.目前,AutoMapper面向模型投影场景,将复杂的对象模型简化为DTO和其他简单对象,这些对象的设计更适合于序列化、通信、消息传递,或者只是域层和应用层之间的反损坏层。

票数 4
EN

Stack Overflow用户

发布于 2011-07-23 16:42:22

您可以尝试更新属性,而不是字段。

例如

代码语言:javascript
复制
 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);      
 } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6797013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档