none
Problema: Registros não é salvo no DB RRS feed

  • 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?






    segunda-feira, 6 de novembro de 2017 16:29

Respostas

Todas as Respostas