2014-03-25 2 views
0

MS SQL 2008 데이터베이스에 연결하는 MVC5 웹 응용 프로그램을 구축 중이므로 사용자가 거기에 저장된 데이터를 검색하고 변경할 수 있습니다. autofac 튜토리얼과 예제를 살펴 보았지만 그 중 어떤 것도 작동하지 않는 것처럼 보입니다.MVC 5 데이터베이스 데이터를 볼 수없는 NHibernate Autofac

내 autofac 구성이 문제라고 가정합니다. 앱을 실행할 때 내 모델이 null이라고 말하기 때문입니다. 내 생각에 자동 팩 (autofac)이 데이터베이스에 연결되어 있지 않다는 의미입니다.

그래서, 내 global.asax.cs 파일에 나는 다음과 같습니다

protected void Application_Start() 
    { 
     #region Autofac 
     // Register Controllers 
     var builder = new ContainerBuilder(); 
     builder.RegisterControllers(typeof(MvcApplication).Assembly); //all controllers in assembly at once ?    
     builder.RegisterControllers(Assembly.GetExecutingAssembly()); 
     builder.RegisterFilterProvider(); 

     // Set the Dependency Resolver 
     IContainer container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

     // Register Model Binders 
     builder.RegisterModelBinders(typeof(MvcApplication).Assembly); //all binders in assembly at once ? 
     builder.RegisterModelBinderProvider(); 

     // Register Modules 
     builder.RegisterModule<PersistenceModule>();   

     #endregion 

     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 


    } 

내가

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> 
    </configSections> 
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
     <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
     <property name="connection.connection_string">Data Source=DEVSRV\SQLSERVER;Initial Catalog=tipdemo;Persist Security Info=True;User ID=admin;Password=***********</property> 
     <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> 
     <!--<mapping assembly="NHibernateTest"/> --> 
    </session-factory> 
    </hibernate-configuration> 
</configuration> 

그리고 내 PersistenceModule 클래스로 hibernate.cfg.xml 파일이 것은 :

public class PersistenceModule : Autofac.Module 
    { 
     protected override void Load(ContainerBuilder builder) 
     { 
      if (builder == null) 
       throw new ArgumentException("builder", "builder is null"); 

      base.Load(builder); 
     } 


     private ISessionFactory ConfigureDB() 
     { 
      Configuration cfg = new Configuration().Configure(System.Web.HttpContext.Current.Server.MapPath("~/Config/hibernate.cfg.xml")); 
      cfg.AddAssembly(typeof(Domain.General.Project).Assembly); 
      return cfg.BuildSessionFactory(); 
     } 
    } 
+0

또한 PersistenceModule 클래스에 중단 점을 넣어야합니다. – noobieDev

+0

Entity Framework가 성숙하고 완전한 기능을 갖춘 지금 사람들이 새로운 개발을 위해 여전히 nhibernate를 사용하는 이유에 대해 궁금해합니다. – EkoostikMartin

+0

처음에는 EF를 사용해 보았지만 실제로 느리고 응답이 없습니다. DB에는 약 60 개의 테이블과 약 3000 개의 레코드가 있습니다. 그러나 그것도 가능하기 때문에 나는 그것을 잘못 설정했다. 누군가 내가 대신이 방법을 사용해야한다고 말했습니다 ... – noobieDev

답변

2

당신이 할 수있는 컨테이너를 만든 후 물건을 컨테이너에 등록하지 마십시오.

Application_Start의 샘플에서 11 번째 라인을 작성했지만 DependencyResolver을 설정하면 ContainerBuilder으로 더 많은 것을 등록합니다. 그렇게 할 수는 없습니다. 먼저 모든 것을 등록한 다음 컨테이너를 마지막으로해야합니다.

귀하의 PersistenceModule을 입력하신 적이 없으므로 - 실제로 컨테이너를 만들었으므로 실제로 등록되지 않았습니다.

어떤 이유에서든 이미 작성된 컨테이너에 등록을 추가해야하는 경우 모두 ContainerBuilder을 새로 작성하고 builder.Update(container)으로 전화해야합니다. 그러나 가능하면 컨테이너가 마지막으로 만들어지기보다는 Update 라우트로 다시 정렬하는 것이 좋습니다.

관련 문제