连接数据库与entityFramework n层应用程序

时间:2014-10-13 15:02:17

标签: entity-framework n-tier-architecture

我正在构建一个restaurent预订系统,使用asp.net mvc 4 entityframework,unity(对于Ioc)和工作单元,存储库模式。所以我在vs 2013上为解决方案制作了4个项目:

  • RestaurentSyeteme(Web项目ASP.NET MVC 4)
  • RestaurentSystemeBusiness:我将业务逻辑放在这一层
  • RestaurentSystemeDAL:数据访问,entityFramework,存储库和上下文
  • RestaurentSystemeDomain:我的实体

这是我的dbContext的代码:

public class RestaurentDbSystem : UnitOfWork
{

    public RestaurentDbSystem(string nameOrConnStr)
        : base(nameOrConnStr)
    {

    }
}

这里是UnitOfWork:

 public class UnitOfWork : DbContext, IUnitOfWork
  {
        public UnitOfWork(string nameOrConnString)
               : base(nameOrConnString)
        {

        }
  }

这是配置我的容器(Unity)的代码:

   private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        container.RegisterType<IUnitOfWork, RestaurentDbSystem>(new PerHttpRequestLifetime(),
            new InjectionConstructor("RestaurentDbSystem"));

        // e.g. container.RegisterType<ITestService, TestService>();            
        container.RegisterType<IClientService, ClientService>();
        container.RegisterType<IClientRepository, ClientRepository>();
        container.RegisterType<IRepository<User>, Repository<User>>();
        container.RegisterType<IRepository<UserType>, Repository<UserType>>();
        return container;
    }

以及我在web.config上配置连接字符串

<add name="RestaurentDbSystem" 
     connectionString="Data Source=LMA000049\mssqlserver;
     Initial Catalog=RestaurentSystemDb;Integrated Security=true"
     providerName="System.Data.SqlClient" />  

我创建了名为=&#39; RestaurentSystemDb&#39;的数据库。

问题是执行app时我有这个例外:

  

类型&#39; System.Data.ProviderIncompatibleException的例外&#39;发生在EntityFramework.dll中但未在用户代码中处理

1 个答案:

答案 0 :(得分:0)

public class RestaurentDbSystem : UnitOfWork

中的

RestaurentDbSystem Initial Catalog=RestaurentSystemDb

中的

RestaurentSystemDb

我认为这两者必须匹配。

通常,如果它们不相同,Code-First会尝试在SQL Express上创建数据库。