使用DataContext文件和webConfig文件将Web App与localdb连接时出现问题

时间:2016-08-24 05:37:20

标签: asp.net-mvc repository-pattern

我使用Repository& amp;创建了MVC Web应用程序。 DI方法。我也使用了Code First方法。

这是我的DataContext文件:

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

    }
}

我在Web.Config文件中定义了连接字符串,如下所示:

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

请注意,我在连接字符串和上下文文件中提到了相同的名称。

这是我的帖子方法:

  [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);
        }
}

当我第一次运行应用程序时,它将创建本地数据库。但是当我要插入数据时,我没有从应用程序中获得任何错误,也没有将我的数据插入数据库。

这是什么原因?我在这里做错了什么?

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

在所有类似的更改之后,您应该在SaveChanges()上致电_context,例如:

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