Ankita
Ankita

Reputation: 1456

Issue in Connecting Web App with localdb using DataContext file and webConfig file

I have created MVC web application using Repository & DI approach. I have used Code First approach too.

Here is my DataContext file:

namespace EfRepPatTest.Data
{
    public class DataContext : DbContext, IDbContext
    {
        public new IDbSet<TEntity> Set<TEntity>() where TEntity: class
        {
            return base.Set<TEntity>();
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
            .Where(type => !String.IsNullOrEmpty(type.Namespace))
            .Where(type => type.BaseType != null && type.BaseType.IsGenericType &&
               type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
            foreach (var type in typesToRegister)
            {
                dynamic configurationInstance = Activator.CreateInstance(type);
                modelBuilder.Configurations.Add(configurationInstance);
            }

            base.OnModelCreating(modelBuilder); 
        }

    }
}

I have defined connecting string in Web.Config file like below:

<add name="DataContext"
   connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\eCommerce.mdf;Integrated Security=True"
   providerName="System.Data.SqlClient"
/>

Please note here I have mentioned same name to the Connection string and my context file.

Here is my post method:

  [HttpPost]
        public ActionResult Create(CategoryModel model)//FormCollection collection
        {
            try
            {
                // TODO: Add insert logic here
                if (model == null)
                    return View(model);

                var category = new Category();
                category.Name = model.Name;

                categoryService.Insert(category);

                return RedirectToAction("Index");
            }
            catch
            {
                return View(model);
            }
        }

CategoryService:

 public class CategoryService : ICategoryService
    {
        private IRepository<Category> _categoryRepository;

        public CategoryService(IRepository<Category> categoryRepository)
        {
            this._categoryRepository = categoryRepository;
        }

    public void Insert(Category category)
            {
                if (category == null)
                    throw new ArgumentNullException("Category");

                _categoryRepository.Insert(category);
            }

}

RepositoryService:

 public class RepositoryService<TEntity> : IRepository<TEntity> where TEntity: class
    {
        private IDbContext _context;

        private IDbSet<TEntity> Entities
        {
            get { return this._context.Set<TEntity>(); }
        }

        public RepositoryService(IDbContext context)
        {
            this._context = context;
        }


        public void Insert(TEntity entity)
        {
            Entities.Add(entity);
        }
}

When I run application on the first time it will create local db. But when I going to insert data, I did not get any error from the application and it does not insert my data to the DB.

What cause this? What I have done wrong here?

Any help is appreciated!

Upvotes: 0

Views: 33

Answers (1)

teo van kot
teo van kot

Reputation: 12491

You should call SaveChanges() on _context after all changes like this for ex.:

public void Insert(TEntity entity)
{
    Entities.Add(entity);
    _context.SaveChanges();
}

Upvotes: 2

Related Questions