2008-10-05 11 views
5

Po prostu zakochałem się w NHibernate i płynnym interfejsie. Ten ostatni umożliwia bardzo ładne odwzorowania z obsługą refaktoryzacji (nie ma potrzeby używania plików xml).Łączenie mapowania Fluent i XML dla NHibnernate

Ale nikt nie jest doskonały, więc brakuje mi płynnego odwzorowania wielu osób. Czy ktoś wie, czy już tam jest? Jeśli tak, to prosta linia kodu byłaby miła.

Ale trzymać się w nagłówku pytanie, czy jest jakiś sposób, aby połączyć płynnie i normalne mapowanie NHibernate.

Obecnie używam następujące wiersze dla mojej konfiguracji testowej z płynną, a drugim bloku kodu dla mojego testu BEZ biegły (z odwzorowań XML). Jak mogę sprawdzić, biegle używać biegle jeśli są dostępne i XML inaczej ...

 var cfg = new Configuration(); 
     cfg.AddProperties(MsSqlConfiguration.MsSql2005.ConnectionString.Is(_testConnectionstring).ToProperties()); 
     cfg.AddMappingsFromAssembly(typeof(CatMap).Assembly); 
     new SchemaExport(cfg).Create(true, true); 

     var persistenceModel = new PersistenceModel(); 
     persistenceModel.addMappingsFromAssembly(typeof(CatMap).Assembly); 
     IDictionary<string, string> properties = MsSqlConfiguration.MsSql2005.UseOuterJoin().ShowSql().ConnectionString.Is(_testConnectionstring).ToProperties(); 
     properties.Add("command_timeout", "340"); 

     session = new SessionSource(properties, persistenceModel).CreateSession(); 

Bez Fluent ...

 config = new Configuration(); 
     IDictionary props = new Hashtable(); 

     props["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider"; 
     props["dialect"] = "NHibernate.Dialect.MsSql2005Dialect"; 
     props["connection.driver_class"] = "NHibernate.Driver.SqlClientDriver"; 
     props["connection.connection_string"] = "Server=localhost;initial catalog=Debug;Integrated Security=SSPI"; 
     props["show_sql"] = "true"; 
     foreach (DictionaryEntry de in props) 
     { 
      config.SetProperty(de.Key.ToString(), de.Value.ToString()); 
     } 
     config.AddAssembly(typeof(CatMap).Assembly); 

     SchemaExport se = new SchemaExport(config); 
     se.Create(true, true); 

     factory = config.BuildSessionFactory(); 
     session = factory.OpenSession(); 

To wszystko ... Chris

PS: Naprawdę jak ta strona, GUI jest doskonały, a jakość wszystkich artykułów jest niesamowita. Myślę, że to będzie ogromny :-) trzeba się zarejestrować ...

Odpowiedz

2

Mapowanie z Foo do Baa:

HasManyToMany<Baa> (x => Baas) 
    .AsBag () //can also be .AsSet() 
    .WithTableName ("foobar") 
    .WithParentKeyColumn ("fooId") 
    .WithChildKeyColumn ("barId") ; 

Zapoznaj się z przykładami w ClassMapXmlCreationTester - one również pokazać, co domyślne nazwy kolumn są.

2

Obecnie ManyToAny nie są realizowane (od momentu pisania).

chodzi o konfigurację dla płynnych i innych płynnych odwzorowań, jesteś prawie tam z pierwszego przykładu.

var cfg = MsSqlConfiguration.MsSql2005 
    .ConnectionString.Is(_testConnectionstring) 
    .ConfigureProperties(new Configuration()); 

cfg.AddMappingsFromAssembly(typeof(CatMap).Assembly); // loads hbm.xml files 

var model = new PersistenceModel(); 
model.addMappingsFromAssembly(typeof(CatMap).Assembly); // loads fluent mappings 
mode.Configure(cfg); 

new SchemaExport(cfg).Create(true, true); 

Główna różnica polega na tym, że schemat SchemaExport jest ostatni. Zakładam, że pierwszym przykładem było ładowanie płynnych mapowań, ale już wcześniej utworzono schemat.

2

Możesz zrobić dokładnie to, co chcesz zrobić w Fluent NHibernate.

Poniższy kod będzie używał składni Fluent NHibernate do płynnego konfigurowania fabryki sesji, która wyszukuje pliki odwzorowań HBM (xml), płynne odwzorowania i konwencje z wielu możliwych złożeń.

var _mappingAssemblies = new Assembly[] { typeof(CatMap).Assembly }; 
var _autoPersistenceModel = CreateAutoPersistenceModel(); 
Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2005.ConnectionString(_testConnectionstring)) 
     .Mappings(m => 
        { 
         foreach (var assembly in _mappingAssemblies) 
         { 
          m.HbmMappings.AddFromAssembly(assembly); 
          m.FluentMappings.AddFromAssembly(assembly) 
           .Conventions.AddAssembly(assembly); 
         } 
         m.AutoMappings.Add(_autoPersistenceModel); 
        }) 
     .ExposeConfiguration(c => c.SetProperty("command_timeout", "340")) 
     .BuildSessionFactory(); 

Istnieje wiele innych dostępnych opcji, a także: Fluent NHibernate Database Configuration

Powiązane problemy