zoukankan      html  css  js  c++  java
  • MVC3点滴之通用Update方法用EmitMapper改进

    刚用EF4.1的时候在MSDN上接触了通用的Update()方法。如:

    public virtual void Update(TEntity entityToUpdate)

    {

        if (context.Entry(entityToUpdate).State == EntityState.Detached)

    dbSet.Attach(entityToUpdate);

    context.Entry(entityToUpdate).State = EntityState.Modified;

    }

     

    但是看到网上看到有改进的Update()方法,但不知道为什么要把这个方法进行改进?

    具体做法是:项目中引用EmitMapper.dll。

    修改Update()中的方法:

    public virtual void Update(TEntity entityToUpdate)

    {

    var entry = context.Entry(entityToUpdate);

    if (entry.State == EntityState.Detached)

    {

    var entityOrigin = GetByID(entityToUpdate.ID);

    EmitMapper.ObjectMapperManager

    .DefaultInstance.GetMapper<TEntity, TEntity>()

    .Map(entityToUpdate, entityOrigin);

    }

    }

    EmitMapper主要用于复制复杂类型的对象。但是为什么要用这种方法改进Update()方法。还得继续研究下。在网上http://q.cnblogs.com/q/29940/ 看到一个EF结合WCF使用碰到通用Upate()方法问题,说不可能Attach到。他是这样修改Update方法的:

    public virtual void Update(T entity)
    {
    T current = this.Where(m => m.Id.Equals(entity.Id))
    .SingleOrDefault();
    if (current != null)
    {
    var context = ((IObjectContextAdapter)DbContext).ObjectContext;
    ObjectStateEntry objectStateEntry;
    if (context.ObjectStateManager.TryGetObjectStateEntry(current, out objectStateEntry))
    {
    objectStateEntry.ApplyCurrentValues(entity);
    objectStateEntry.SetModified();
    this.Commit();
    }
    }
    }

  • 相关阅读:
    转inux Shell编程入门
    转CentOS — MySQL备份 Shell 脚本
    JAVA4种线程池的使用
    http://cyber-dojo.org/
    tomcat内存大小设置
    rails的数据库查询方法
    Java 微信公众号上传永久素材的方法
    微信回复图文消息
    plsql解决64位解决办法
    Ruby中使用patch HTTP方法
  • 原文地址:https://www.cnblogs.com/SINXUESONG/p/2298403.html
Copyright © 2011-2022 走看看