Usuário com melhor resposta
Problema: Registros não é salvo no DB

Pergunta
-
Amigos, boa tarde!
Estou desenvolvendo um pequeno e simples aplicação em Windows Forms e, apesar de não ser totalmente leigo, estou me batendo com algo simples, porém, não consigo encontrar a causa do problema. Estou utilizando Repositórios Genéricos e sim, estou fazendo acesso direto a ele, pois não terei tempo para implementar DDD em sua plenitude, uma vez que, preciso apresentar o sistema na faculdade essa semana ainda.
Acontece que estou tentando salvar registros no SQL e não consigo. Já rastreei todo o fluxo por meio de breakpoints e aparentemente tudo está ok. Mas quando vou no banco, não é criado nenhum registro. Estou programando em Code First, utilizando EF. Abaixo segue código:
Estrutura de Domínio:
public class Category { #region Attributs public int CategoryId { get; set; } public string Name { get; set; } public string Description { get; set; } public DateTime AddedDate { get; set; } public DateTime ModifiedDate { get; set; } #endregion #region Relationships Other Classes public virtual IEnumerable<Product> Products { get; set; } #endregion }
public interface IRepositoryBase<TEntity> where TEntity : class { IEnumerable<TEntity> GetAll(); TEntity GetById(int id); void Update(TEntity entity); void Save(); void Create(TEntity entity); void Delete(TEntity entity); void Dispose(); }
Estrutura - Infrastructure
public class MedicalPlataformContext : DbContext { #region ConnectionString public MedicalPlataformContext() : base("DBMedical") { } #endregion #region DBSets public DbSet<Category> Categories { get; set; } #endregion #region Configurations protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); modelBuilder.Properties() .Where(p => p.Name == p.ReflectedType.Name + "Id") .Configure(p => p.IsKey()); modelBuilder.Properties<string>() .Configure(p => p.HasColumnType("varchar")); modelBuilder.Properties<string>() .Configure(p => p.HasMaxLength(256)); //Files Class Configuration (General) modelBuilder.Configurations.Add(new CategoryConfiguration()); } public override int SaveChanges() { foreach (var entry in ChangeTracker.Entries().Where(entry => entry.Entity.GetType().GetProperty("AddedDate") != null)) { if (entry.State == EntityState.Added) { entry.Property("AddedDate").CurrentValue = DateTime.Now; entry.Property("ModifiedDate").CurrentValue = DateTime.Now; } if (entry.State == EntityState.Modified) { entry.Property("AddedDate").IsModified = false; entry.Property("ModifiedDate").CurrentValue = DateTime.Now; } } return base.SaveChanges(); #endregion } }
public class RepositoryBase<TEntity> : IDisposable, IRepositoryBase<TEntity> where TEntity : class { protected MedicalPlataformContext context = new MedicalPlataformContext(); public void Create(TEntity entity) { context.Set<TEntity>().Add(entity); } public void Delete(TEntity entity) { context.Set<TEntity>().Remove(entity); } public void Dispose() { context.Dispose(); } public IEnumerable<TEntity> GetAll() { return context.Set<TEntity>().ToList(); } public TEntity GetById(int id) { return context.Set<TEntity>().Find(id); } public void Save() { context.SaveChanges(); } public void Update(TEntity entity) { context.Entry(entity).State = EntityState.Modified; } }
Estrutura - Presentation
Tenho um Form e ao clicar no botão para salvar tenho o código abaixo:
private void btnCategorySave_Click(object sender, EventArgs e) { try { if (IsValid()) { Category c = new Category(); c.Name = txbCategoryName.Text.Trim(); c.Description = txbCategoryDescription.Text.Trim(); RepositoryBase<Category> category = new RepositoryBase<Category>(); category.Create(c); MessageBox.Show("Registro gravado com sucesso."); txbCategoryName.Clear(); txbCategoryDescription.Clear(); } } catch (Exception ex) { MessageBox.Show("Um erro ocorreu durante o processo: " + ex.Message); } } private bool IsValid() { if(string.IsNullOrEmpty(txbCategoryName.Text.Trim())) { MessageBox.Show("O campo 'Nome' é obrigatório."); txbCategoryName.Focus(); return false; } return true; }
Como dito anteriormente, já rastreei o todo fluxo. O banco é criado normalmente, porém não salva os registros. Alguém pode me dizer em que estou errando?
Respostas
-
category.Create(c);
category.Save();
- Sugerido como Resposta Rafael Almeida - MVPMVP sábado, 11 de novembro de 2017 15:22
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 13 de novembro de 2017 09:07
Todas as Respostas
-
category.Create(c);
category.Save();
- Sugerido como Resposta Rafael Almeida - MVPMVP sábado, 11 de novembro de 2017 15:22
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 13 de novembro de 2017 09:07
-
-
UitanMaciel_
Marque a resposta do colega Cezar Mendes como útil caso tenha resolvido seu problema!Rafael Almeida
Senior Developer .NET C#
Development Leader at JAMSOFT Informática
Criador e Mantenedor do Entity Framework Core for Firebird
Contribuidor do Entity Framework Core
Email: ralms@ralms.net
Blog - GitHub - LinkedIn - Twitter