如何重构EF数据访问代码以避免上下文问题

时间:2014-11-11 18:58:19

标签: c# entity-framework entity-framework-6

我正在尝试获取并更新EF对象但我收到错误:

  

附加信息:无法引用实体对象   IEntityChangeTracker的多个实例。

我明白这是什么问题。 但是如何正确编写数据访问方法以避免这样的问题?

var store = (new StoresRepository(connectionString)).GetStore(1);
// Change store object
(new StoresRepository(connectionString)).Update(store);

数据访问代码:

public class StoresRepository
    {
        AppDbContext context;

        public StoresRepository(string connectionString)
        {
            context = new AppDbContext(connectionString);
        }

        public Store GetStore(int storeId)
        {
            var store = context.Stores.SingleOrDefault(x=>x.StoreId == storeId);

            return store;
        }
        public void Update(Store store)
        {
            context.Stores.Attach(store);

            context.SaveChanges();
        }

1 个答案:

答案 0 :(得分:1)

创建一个Repository对象,而不是每次都创建新对象。

var repo = new StoresRepository(connectionString);

var store = repo.GetStore(1);

repo.Update(store);