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

本文关键字:代码 问题 上下文 访问 数据 何重构 重构 EF | 更新日期: 2023-09-27 18:30:11

我正在尝试获取和更新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();
        }

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

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

var repo = new StoresRepository(connectionString);
var store = repo.GetStore(1);
repo.Update(store);