当前位置:  开发笔记 > 编程语言 > 正文

调用ToList()后实体框架更改跟踪

如何解决《调用ToList()后实体框架更改跟踪》经验,为你挑选了0个好方法。

我很难理解EF6中的变化跟踪.

我有类似的代码.

public class SomeClass
{
    private List _users;
    private DAL _dal;

    public void ProcessUsers()
    {
        _users = _dal.GetUsers();

        foreach(var u in users)
        {
            u.user.Comment = "This is a test";
        }

        _dal.SaveChanges();
    }
}

DAL类看起来有点像这样.

public class DAL
{
    ...
    private DataContext _context; // Assume that this is being newed up in a constructor.

    public List GetUsers()
    {
        return _context.Users.ToList();
    }

    public void SaveChanges()
    {
        _context.SaveChanges();
    }
}

因此,正如我们可以从ProcessUsers方法中的代码中看到的那样,我们有一个用户列表,我们正在修改该列表.

现在我知道这是有效的,它是我一直这样做的方式,但我总是认为列表中的对象(在这种情况下是用户)是对DBSet Local集合中相应对象的引用.

经过一番思考之后,我不确定是否会出现这种情况,好像上下文已被处理,列表仍然被填充并且可以被操作(我们只是松开了将其推回数据库的能力而没有一些额外的工作)所以从那里透视列表中的项目必须是DBSet Local集合中的项目的副本...但是如果是这种情况我不会操作列表中的对象会对dbset中的对象产生任何影响这将是一个副本.

综上所述

问题是当我在DBSet上调用ToList时会发生什么,以及在此实例中更改跟踪如何工作? - 我知道它确实有效,但我认为我目前的理解可能不正确.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有