Я работаю с Web Api 2. Я создал проект ASP.Net Web API 2 и подключил его к базе данных с помощью Entity Framework.
Когда я обновляю данные в базе данных и загружаю их снова, данные не обновляются, хотя на изменения базы данных влияют.Я много искал и обнаружил, что мне нужно вводить DbContext
по времени жизни PerRequestLifetimeManager
, но, к сожалению, он пока работает не совсем правильно.
Я использовал следующий код, который инициализирует экземпляры с Unity:
_container.RegisterType<MabnaERPContext>(new PerRequestLifetimeManager());
Следующая строка была моим кодом до того, как я сделал изменения:
_container.RegisterType<MabnaERPContext>(new HierarchicalLifetimeManager ());
И это некоторый код хранилища:
public class RepScuUser : RepositoryBase<scuUser>, IDaScuUser
{
public RepScuUser(MabnaERPContext context) : base(context)
{
}
/// <summary>
/// Gets scuUser by userName and password
/// </summary>
/// <param name="userName">Username of user</param>
/// <param name="password">Password of user</param>
/// <returns>scuUser</returns>
public async Task<scuUser> GetByUserPassAsync(string userName, string password)
{
var result = await (from su in Context.scuUser
//join scdd in Context.scuCmpyDurDB on su.CmpyDurDBID equals scdd.ID
//join scd in Context.scuCmpyDur on scdd.CmpyDurID equals scd.ID
where su.Name == userName && su.Password == password
select su).Include(x=>x.scuCmpyDurDB.scuCmpyDur.scuCompany).FirstOrDefaultAsync();
return result;
}
}
, и это мой RepositoryBase
класс:
public abstract class RepositoryBase<TEntity> : IDa<TEntity> where TEntity : class
{
protected MabnaERPContext Context { get; }
protected DbSet<TEntity> DbSet { get; }
public virtual IQueryable<TEntity> DbSetNoTracking => DbSet.AsNoTracking();
protected RepositoryBase(MabnaERPContext context)
{
Context = context;
DbSet = context.Set<TEntity>();
}
}
Какая лучшая практика для разработки этого?