相关疑难解决方法(0)

如何在EF 4.1 RC中关闭DbContext级别的更改跟踪?

我遇到了一个似乎常见的问题:我正在更新数据库中的值,但EF正在使用其原始的内存副本,并且这些更改的值不会反映在显示的数据中.我理解为什么会这样,但我无法找到解决方法.

最常见的解决方案似乎是设置MergeOptions.NoTracking完全关闭更改跟踪(或AsNoTracking()在查询时使用扩展方法)并在每次访问对象时强制刷新,这对我来说很好.

我有一个通用的基础存储库,我的其他存储库继承自:

public abstract class RepositoryBase<T> where T : class
{
    private readonly IDbSet<T> _dbset;
    private readonly IUnitOfWork _unitOfWork;

    protected RepositoryBase(IUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
        _dbset = _unitOfWork.Database.Set<T>();
    }

    public virtual IQueryable<T> All()
    {
        return _dbset;
    }

    // Some other IQueryable methods here (Query, GetByProductCode etc)

    public virtual T Get(long id)
    {
        return _dbset.Find(id);
    }
}    
Run Code Online (Sandbox Code Playgroud)

DbContext这样的:

public class Db : DbContext
{
    private IDbSet<Product> _products;

    public IDbSet<Product> Products
    {
        get { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework change-tracking ef-code-first entity-framework-4.1

7
推荐指数
1
解决办法
9359
查看次数

实体框架和DbContext - 对象跟踪

我对实体框架中DbContext的使用有点困惑.这是我很困惑的情景.

当列表返回这次时,它不反映我在运行update语句时所做的更新/更改,除非我遍历所有事务并重新加载它们:

foreach (DbEntityEntry<Transactions> item in DefaultContext.ChangeTracker.Entries<Transactions>())
{
    DefaultContext.Entry<Transactions>(item.Entity).Reload();
}
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?我假设在我的初始查询中,它们被附加到对象上下文.然后当我第二次查询时,它不会访问数据库,只是从对象上下文中提取实体,除非我清除/分离或单独重新加载所有实体.

c# entity-framework .net-4.0 visual-studio-2010 entity-framework-4.1

2
推荐指数
1
解决办法
6975
查看次数