如何分离实体,以便我可以创建一个副本

时间:2016-04-27 20:12:42

标签: c# entity-framework

我使用的是EF 6,项目正在使用UnitOfWork模式。

我的代码基于:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

以下是GenericRepository的片段:

    public virtual void Insert(TEntity entity)
    {
        dbSet.Add(entity);
    }

    public virtual void Delete(object id)
    {
        TEntity entityToDelete = dbSet.Find(id);
        Delete(entityToDelete);
    }

    public virtual void Delete(TEntity entityToDelete)
    {
        if (context.Entry(entityToDelete).State == EntityState.Detached)
        {
            dbSet.Attach(entityToDelete);
        }
        dbSet.Remove(entityToDelete);
    }

    public virtual void Update(TEntity entityToUpdate)
    {
        dbSet.Attach(entityToUpdate);
        context.Entry(entityToUpdate).State = EntityState.Modified;
    }

我想要做的是加载我的实体没有跟踪,所以我可以保存它,以便创建对象及其关联等的重复版本。

我想基本上这样做:

var company = DbContext.Companies.AsNoTracking()
                       .Include(c => c.Locations
                           .Select(l => l.Stores
                               .Select(s => s.Products)))
                       .Where(c => c.Id == 123)
                       .FirstOrDefault();
DbContext.Companies.Add(company);
DbContext.SaveChanges();

我不确定如何使用我拥有的UnitOfWork设置来完成此操作。

我尝试做一个DbSet.Remove但是只是试图删除它,而不是设置跟踪。

我该怎么做?

0 个答案:

没有答案