Я использую Unity IoC в C # и DbContext с ContainerControlledLifetimeManager для контекста приложения с трехуровневой архитектурой, использующей структуру сущностей, например,
Это общий репозиторий:
public interface IRepository<ModelClass, EntityClass>
where ModelClass : class
where EntityClass : class
{
void Add(ModelClass entity);
void Delete(ModelClass entity);
void Update(ModelClass entity,int id);
bool Save();
void RefreshContext();
}
Этоинтерфейс уровня доступа к данным:
public interface IShipmentAccess :
IRepository<ShipmentOrder, ShipmentOrderEntity>
{
List<ShipmentOrder> GetAllShipmentOrder();
List<ShipmentOrder> GetShipmentOrderWithId(int id);
bool UpdateFileExported(int id);
}
Реализация класса DataAcess
public class ShipmentOrderDataAccess : GenericRepository<ShipmentOrder,
ShipmentOrderEntity>, IShipmentAccess
{
ApplicationContext context;
public ShipmentOrderDataAccess(ApplicationContext context)
: base(context)
{
this.context = context;
}
}
Реализация класса обслуживания
public class ShipmentOrderService : BaseService
{
ApplicationContext Context;
IShipmentAccess shipmentAccess;
PackingOrderService packingOrderService =
DependencyInjection.DependencyInjection.Retrieve<PackingOrderService>();
public ShipmentOrderService(ApplicationContext Context, IShipmentAccess
shipmentAccess)
{
this.Context = Context;
this.shipmentAccess = shipmentAccess;
}
}
А наш класс внедрения зависимостей выглядит следующим образом:
Container.RegisterType<DbContext, LogisticsERP.DA.Entities.ApplicationContext>(
new ContainerControlledLifetimeManager());
Container.RegisterType<IShipmentAccess, ShipmentOrderDataAccess>();
Но проблема здесь в том, что, хотя мы используем одноэлементный менеджер времени жизни (ContainerControlledLifetimeManager) из Unity и Entity Framework, он не загружает обновленные данные из базы данных.Я ищу в Интернете и нашел это решение, чтобы получить обновленные данные из базы данных.Это правильное решение?
public void RefreshContext()
{
foreach (var entity in context.ChangeTracker.Entries())
{
entity.Reload();
}
}