2009-09-19 2 views
0

Я пишу это приложение консоли, чтобы опробовать NCommon.NCommon Newbie Help

Код ниже не возвращает мне ничего. (Это использование AdventureWorks дб.)

class Program 
{ 
    static void Main(string[] args) 
    { 
     ISessionFactory factory = SessionProvider.CreateSessionFactory(); 

     Store.Application.Set("NHibernateSessionFactory", factory); 
     NHUnitOfWorkFactory.SetSessionProvider(GetSession); 
     ConfigureContainer(); 

     using (ISession session = factory.OpenSession()) 
     { 
      IRepository<SalesOrderHeader> orderRepository = new NHRepository<SalesOrderHeader>(session); 

      using (var scope = new UnitOfWorkScope()) 
      { 
       List<SalesOrderHeader> orders = new List<SalesOrderHeader>(); 
       orders = (from order in orderRepository 
          select order).ToList(); 

       foreach (var order in orders) 
       { 
        Console.WriteLine(order.DueDate); 
       } 
      } 
     } 

     Console.WriteLine("[Done]"); 
     Console.ReadLine(); 
    } 

    /// <summary> 
    /// Configure the Windsor container. 
    /// </summary> 
    private static void ConfigureContainer() 
    { 
     var container = new WindsorContainer(); 
     var currentAssembly = typeof(Program).Assembly; 

     //Register the NHibernate unit of work and repository components 
     container.Register(Component.For<IUnitOfWorkFactory>().ImplementedBy<NHUnitOfWorkFactory>().LifeStyle.Transient) 
       .Register(Component.For(typeof(IRepository<>)).ImplementedBy(typeof(NHRepository<>)).LifeStyle.Transient); 

     //Auto register all service implementations 
     container.Register(AllTypes.FromAssembly(currentAssembly) 
            .Where(type => type.Namespace.EndsWith("Services")) 
            .WithService.FirstInterface() 
            .Configure(x => x.LifeStyle.Transient)); 

     Store.Application.Set("ApplicationContainer", container); 
     ServiceLocator.SetLocatorProvider 
     (
      () => new WindsorServiceLocator(Store.Application.Get<IWindsorContainer>("ApplicationContainer")) 
     ); 
    } 

    private static ISession GetSession() 
    { 
     return Store.Application.Get<ISessionFactory>("NHibernateSessionFactory").OpenSession(); 
    } 
} 

public class SessionProvider 
{ 
    public static ISessionFactory CreateSessionFactory() 
    { 
     return Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2008 
       .ConnectionString(@"Data Source=MYLAPTOP\SQL2008;Initial Catalog=AdventureWorks;Integrated Security=True;")) 
      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SalesOrderHeader>()) 
      .BuildSessionFactory(); 
    } 
} 

public class ISalesOrderHeaderMap : ClassMap<ISalesOrderHeader> 
{ 
    public ISalesOrderHeaderMap() 
    { 
     Table("Sales.SalesOrderHeader"); 
     Id(x => x.Id); 
     References(x => x.Customer); 
     Map(x => x.OrderDate); 
     Map(x => x.DueDate); 
     Map(x => x.ShipDate); 
     Map(x => x.Status); 
     HasMany(x => x.Details) 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

[за исключением кода для POCO SalesOrderHeader и ISalesOrderHeader]

Я не добавлял Proxy Factory свойство настройки больше, как, когда я попытался добавления

  .ExposeConfiguration(cfg => 
       { 
        cfg.Properties.Add("proxyfactory.factory_class", 
           "NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"); 
       }) 

в оператор Fluid SessionProvider, он сказал, что элемент того же ключа уже добавлен.

ответ

2

Я понял, что Fluent NHibernate плохо работает с интерфейсами. Я сопоставил конкретные типы, и это сработало.

+0

Я борюсь с NCommon и Fluent nhibernate. Можете ли вы поделиться тем, что вы сделали, чтобы заставить его работать? – Todd