Atualização de dados com Entity Framework

07/08/2019

7

Fala pessoal, tudo certo?

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; }
}
Responder

Posts

07/08/2019

Jothaz

Faça um teste:

1 - Abra o site.
2 - Atualize o ADM.
3 - Execute CRTL + F5 no site Web e veja se a atualização é replicada.


Responder

07/08/2019

Tainã Ramos

Faça um teste:

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 :/
Responder

07/08/2019

Jothaz

Depois de atualizar o ADM o banco de dados atualiza?

Você esta usando Code First ou Database First?

Responder

07/08/2019

Tainã Ramos

Depois de atualizar o ADM o banco de dados atualiza?

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() ;
        }
}
Responder