Atualização de dados com Entity Framework
07/08/2019
0
Devo estar cometendo algum erro de principiantes, mas estou com a seguinte dúvida. Tenho uma Solution e nela tenho duas Web Application (website e painel administrativo) e uma Class Library usada em ambos os projetos para transações no DB com Entity Framework. O problema que está acontecendo é que todas as informações que são alteradas via painel administrativo ou se eu for direto no banco de dados e der um insert, por exemplo, deveriam ser atualizadas automaticamente no website, porém não acontece a não ser que eu pare o projeto e executar ele novamente (acredito que deva atualizar o context). Alguém sabe como seria o correto fazer nesse caso?
Segue um exemplo das minhas classes que fazem a conexão.
public class NewsRepository : BaseRepository { public List<News> News { get { return _context.News.ToList(); } } public void Save(ref News news, ref string error) { try { if (news.NewsId > 0) _context.Entry(news).State = EntityState.Modified; else _context.News.Add(news); _context.SaveChanges(); } catch (DbEntityValidationException ex) { foreach (var eve in ex.EntityValidationErrors) foreach (var ve in eve.ValidationErrors) error = ve.ErrorMessage; } catch (DbUpdateException ex) { error = ex.InnerException.InnerException.Message; } catch (UpdateException ex) { error = ex.Message; } } } public class BaseRepository { protected BaseContext _context; public BaseRepository() { _context = Repository.InitializeContext(); } } public class Repository { private static BaseContext _context; public static BaseContext InitializeContext() { if (_context == null) _context = new BaseContext(); return _context; } } public class BaseContext : DbContext { public BaseContext() : base("Name=FundacoesUFPel") { Database.SetInitializer(new CreateDatabaseIfNotExists<BaseContext>()); Database.Initialize(false); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } public DbSet<News> News { get; set; } }
Tainã Ramos
Posts
07/08/2019
Jothaz
1 - Abra o site.
2 - Atualize o ADM.
3 - Execute CRTL + F5 no site Web e veja se a atualização é replicada.
07/08/2019
Tainã Ramos
1 - Abra o site.
2 - Atualize o ADM.
3 - Execute CRTL + F5 no site Web e veja se a atualização é replicada.
Não é problema de cache de navegador e sim o meu context que não atualiza :/
07/08/2019
Jothaz
Você esta usando Code First ou Database First?
07/08/2019
Tainã Ramos
Você esta usando Code First ou Database First?
Sim, o banco de dados atualiza normalmente.
Estou utilizando Code First.
Eu resolvi da seguinte forma, criei um método que instancia meu _context e chamo esse método sempre que vou realizar alguma consulta, porém não sei se é a melhor forma de fazer.
public class Repository { private static BaseContext _context; public static BaseContext InitializeContext() { _context = new BaseContext(); return _context; } } public class BaseRepository { protected BaseContext _context; protected void UpdateContext() { _context = Repository.InitializeContext(); } public BaseRepository() { UpdateContext(); } } public class NewsRepository : BaseRepository { public List<News> News { get { return _context.News.ToList(); } } public News GetById(int newsId) { UpdateContext(); return News.Where(n => n.NewsId == newsId).FirstOrDefault() ; } }
Clique aqui para fazer login e interagir na Comunidade :)