If your not using interceptors or eventlisteners, you can safely delete that code.
I'm using eventlisteners to set poor man audit fields on my entities on insert and update. The interceptor was used for concurrency checking on save. On Jun 27, 2014 1:31 PM, "Michael Murphy" <[email protected]> wrote: > Thank you, Fran. Looks good. I'll have to go read the fine manual to find > out what the Configure.SetInterceptor does, that's not something I've seen > yet. Thank you again. :-) > > On Thursday, June 26, 2014 8:28:19 PM UTC-5, fknebels wrote: >> >> Here's an NHibernateInitializer class I use with mapping by code, >> >> It should take care of everything you need. >> >> using NHibernate.Cfg; >> using NHibernate.Cfg.MappingSchema; >> using NHibernate.Dialect; >> using NHibernate.Driver; >> using NHibernate.Event; >> using NHibernate.Extensions.Domain; >> using NHibernate.Extensions.EventListeners; >> using NHibernate.Extensions.Interceptors; >> using NHibernate.Extensions.Mapping; >> using NHibernate.Mapping.ByCode; >> using NHibernate.Tool.hbm2ddl; >> using System; >> using System.Collections.Generic; >> using System.Data; >> using System.Linq; >> using System.Reflection; >> >> namespace NHibernate.Extensions >> { >> public abstract class NHibernateInitializer : IDomainMapper >> { >> private String MappingAssemblyName = >> System.Configuration.ConfigurationManager. >> AppSettings["NHibernate.Mapping.Assembly"]; >> >> protected Configuration Configure; >> private ISessionFactory _sessionFactory; >> private ModelMapper _mapper = new ModelMapper(); >> private Assembly _mappingAssembly; >> >> public ISessionFactory SessionFactory >> { >> get >> { >> if (System.Configuration.ConfigurationManager. >> ConnectionStrings[System.Environment.MachineName] == null) >> throw new System.Configuration. >> ConfigurationErrorsException(String.Format("Connection string {0} does >> not exist.", System.Environment.MachineName)); >> >> if (String.IsNullOrWhiteSpace(System.Configuration. >> ConfigurationManager.ConnectionStrings[System.Environment.MachineName]. >> ConnectionString)) >> throw new System.Configuration. >> ConfigurationErrorsException(String.Format("Connection string {0} is >> empty.", System.Environment.MachineName)); >> >> return _sessionFactory ?? (_sessionFactory = >> Configure.BuildSessionFactory()); >> } >> } >> >> private Assembly MappingAssembly >> { >> get >> { >> if (String.IsNullOrEmpty(MappingAssemblyName)) >> throw new System.Configuration. >> ConfigurationErrorsException("NHibernate.Mapping.Assembly key not set in >> application config file."); >> >> return _mappingAssembly ?? (_mappingAssembly = >> Assembly.Load(MappingAssemblyName)); >> } >> } >> >> public void Initialize() >> { >> Configure = new Configuration(); >> Configure.SetInterceptor(new StaleInterceptor()); >> Configure.EventListeners.PreInsertEventListeners = new >> IPreInsertEventListener[] { new EventListener() }; >> Configure.EventListeners.PreUpdateEventListeners = new >> IPreUpdateEventListener[] { new EventListener() }; >> Configure.SessionFactoryName(System.Configuration. >> ConfigurationManager.AppSettings["SessionFactoryName"]); >> Configure.DataBaseIntegration(db => >> { >> db.Dialect<MsSql2008Dialect>(); >> db.Driver<SqlClientDriver>(); >> db.KeywordsAutoImport = >> Hbm2DDLKeyWords.AutoQuote; >> db.IsolationLevel = >> IsolationLevel.ReadCommitted; >> db.ConnectionStringName = >> System.Environment.MachineName; >> db.BatchSize = 20; >> db.Timeout = 10; >> db.HqlToSqlSubstitutions = "true 1, false >> 0, yes 'Y', no 'N'"; >> db.LogFormattedSql = true; >> }); >> Configure.SessionFactory().GenerateStatistics(); >> >> Map(); >> } >> >> public void CreateSchema() >> { >> new SchemaExport(Configure).Create(false, true); >> } >> >> public void DropSchema() >> { >> new SchemaExport(Configure).Drop(false, true); >> } >> >> public void UpdateSchema() >> { >> new SchemaUpdate(Configure).Execute(false, true); >> } >> >> private void Map() >> { >> _mapper.AddMappings(MappingAssembly.GetExportedTypes()); >> Configure.AddDeserializedMapping(_mapper. >> CompileMappingForAllExplicitlyAddedEntities(), "MyWholeDomain"); >> } >> >> public HbmMapping HbmMapping >> { >> get { return _mapper.CompileMappingFor(GetDomainEntities()); >> } >> } >> >> public IList<HbmMapping> HbmMappings >> { >> get { return >> _mapper.CompileMappingForEach(GetDomainEntities()).ToList(); >> } >> } >> >> /// <summary> >> /// Gets the domain entities. >> /// </summary> >> /// <returns></returns> >> /// <remarks>by default anything that derives from EntityBase and >> isn't abstract or generic</remarks> >> protected virtual IEnumerable<System.Type> GetDomainEntities() >> { >> List<System.Type> domainEntities = (from t in MappingAssembly. >> GetExportedTypes() >> where >> typeof(EntityBase<Guid>).IsAssignableFrom(t) >> && (!t.IsGenericType || >> !t.IsAbstract) >> select t >> ).ToList(); >> >> return domainEntities; >> } >> >> protected virtual IEnumerable<System.Type> GetMappingClasses() >> { >> List<System.Type> domainEntities = (from t in MappingAssembly. >> GetExportedTypes() >> where typeof(MapBase<>). >> IsAssignableFrom(t) >> && (!t.IsGenericType || >> !t.IsAbstract) >> select t >> ).ToList(); >> >> return domainEntities; >> } >> } >> } >> >> >> On Thu, Jun 26, 2014 at 8:27 PM, Michael Murphy <[email protected]> >> wrote: >> >>> Ricardo, >>> >>> Thank you, very much. That worked! Additionally, in case any other >>> newbie is reading this later, this page (NHibernate 3.2 mapping sample) >>> <http://lycog.com/programming/nhibernate-32-mapping-code-basic-mapping/> has >>> some additional info that is very helpful. In particular if all the models >>> and mappings are in a single assembly, rather than specifying each mapping >>> this appears to work. >>> >>> >>> public InMemoryDatabaseTest(Assembly assemblyContainingMapping) { >>> try { >>> if (Configuration == null) { >>> Configuration = new Configuration() >>> .SetProperty(NHibernate.Cfg.Environment.ConnectionProvider, >>> "NHibernate.Connection.DriverConnectionProvider") >>> .SetProperty(NHibernate.Cfg.Environment.ConnectionDriver, >>> typeof(SQLite20Driver).AssemblyQualifiedName) >>> .SetProperty(NHibernate.Cfg.Environment.ConnectionString, >>> "Data Source=:memory:;Version=3;New=True;") >>> .SetProperty(NHibernate.Cfg.Environment.ShowSql, "false") >>> .SetProperty(NHibernate.Cfg.Environment.Dialect, >>> typeof(SQLiteDialect).AssemblyQualifiedName) >>> .SetProperty(NHibernate.Cfg.Environment.ReleaseConnections, >>> "on_close") >>> .SetProperty(NHibernate.Cfg.Environment.MaxFetchDepth, "1") >>> .AddAssembly(assemblyContainingMapping); >>> >>> //mapper = new ModelMapper(); >>> //mapper.AddMapping<ModelMap>(); >>> //mapper.AddMapping<NumberedEntityMap>(); >>> //mapper.AddMapping<PersonMap>(); >>> mapper = new ModelMapper(); >>> mapper.AddMappings(assemblyContainingMapping. >>> GetExportedTypes()); >>> mappings = mapper.CompileMappingForAllExplicitly >>> AddedEntities(); >>> Configuration.AddDeserializedMapping(mappings, null); >>> >>> SessionFactory = Configuration.BuildSessionFactory(); >>> } >>> >>> session = SessionFactory.OpenSession(); >>> connection = session.Connection; >>> new SchemaExport(Configuration) >>> .SetOutputFile(".\\sqlite.sql") >>> .Execute(true, true, false, connection, Console.Out); >>> >>> } catch (Exception ex) { >>> throw; >>> } >>> } >>> >>> >>> Honestly the part that confused me was the bit about >>> .AddAssembly(assemblyContainingMapping). >>> I'd expected that to take care of the mapper and mappings part. Thank you >>> again, Ricardo! >>> >>> >>> On Thursday, June 26, 2014 6:33:58 PM UTC-5, Ricardo Peres wrote: >>>> >>>> Try this before building the session factory: >>>> >>>> var mapper = new ModelMapper(); >>>> mapper.AddMapping<ModelMap>(); >>>> var mappings = mapper.CompileMappingForAllExplicitlyAddedEntities(); >>>> Configuration.AddDeserializedMapping(mappings, null); >>>> >>>> RP >>>> >>>> >>>> On Thursday, June 26, 2014 10:57:53 PM UTC+1, Michael Murphy wrote: >>>>> >>>>> Hello all, >>>>> >>>>> I've been using Castle ActiveRecord and am interested in starting a >>>>> new project using just NHibernate. I'd like to use the latest stable >>>>> release which appears to be v3.3.3.4001. I'd like to use the Mapping >>>>> ByCode feature since that is similar to the Castle ActiveRecord that I >>>>> have >>>>> been working with and seems to offer me the quickest approach to working. >>>>> I've created a simple class >>>>> >>>>> public class Model { >>>>> public virtual long ID { get; set; } >>>>> >>>>> } >>>>> >>>>> public class ModelMap : ClassMapping<Model> { >>>>> public ModelMap() { >>>>> Id(x => x.ID, m => m.Generator(Generators.Identity)); >>>>> Lazy(false); >>>>> } >>>>> } >>>>> >>>>> >>>>> i've created a simple MSTest Unit Test >>>>> using SyLogis.Models; >>>>> using Microsoft.VisualStudio.TestTools.UnitTesting; >>>>> namespace TestProject1 >>>>> { >>>>> [TestClass()] >>>>> public class ModelTest { >>>>> >>>>> static InMemoryDatabaseTest imdb = null; >>>>> >>>>> >>>>> [ClassInitialize()] >>>>> public static void MyClassInitialize(TestContext testContext) { >>>>> System.Reflection.Assembly assembly = typeof(NumberedEntityMap). >>>>> Assembly; >>>>> imdb = new InMemoryDatabaseTest(assembly); >>>>> } >>>>> >>>>> [TestMethod()] >>>>> public void ID_Test() { >>>>> Model target = new Model(); // TODO: Initialize to an >>>>> appropriate value >>>>> long expected = 1; // TODO: Initialize to an appropriate value >>>>> long actual; >>>>> target.ID = expected; >>>>> actual = target.ID; >>>>> imdb.session.Save(target); >>>>> target = null; >>>>> target = imdb.session.Get<Model>(expected); >>>>> Assert.AreEqual<long>(expected, target.ID); >>>>> } >>>>> } >>>>> } >>>>> >>>>> and here is the inmemory piece >>>>> using System; >>>>> using System.Collections.Generic; >>>>> using System.Linq; >>>>> using System.Text; >>>>> using NHibernate; >>>>> using NHibernate.Cfg; >>>>> using NHibernate.Tool.hbm2ddl; >>>>> using System.Reflection; >>>>> using System.Data; >>>>> >>>>> >>>>> namespace TestProject1 { >>>>> >>>>> public class InMemoryDatabaseTest : IDisposable { >>>>> >>>>> public static Configuration Configuration; >>>>> public static ISessionFactory SessionFactory; >>>>> public ISession session; >>>>> public IDbConnection connection; >>>>> >>>>> public InMemoryDatabaseTest(Assembly assemblyContainingMapping) { >>>>> try { >>>>> if (Configuration == null) { >>>>> Configuration = new Configuration() >>>>> .SetProperty(NHibernate.Cfg.Environment.ConnectionProvider, >>>>> "NHibernate.Connection.DriverConnectionProvider") >>>>> .SetProperty(NHibernate.Cfg.Environment.ConnectionDriver, >>>>> typeof(SQLite20Driver).AssemblyQualifiedName) >>>>> .SetProperty(NHibernate.Cfg.Environment.ConnectionString, >>>>> "Data Source=:memory:;Version=3;New=True;") >>>>> .SetProperty(NHibernate.Cfg.Environment.ShowSql, "false") >>>>> .SetProperty(NHibernate.Cfg.Environment.Dialect, >>>>> typeof(SQLiteDialect).AssemblyQualifiedName) >>>>> .SetProperty(NHibernate.Cfg.Environment.ReleaseConnections, >>>>> "on_close") >>>>> .SetProperty(NHibernate.Cfg.Environment.MaxFetchDepth, >>>>> "1") >>>>> .AddAssembly(assemblyContainingMapping); >>>>> >>>>> SessionFactory = Configuration.BuildSessionFactory(); >>>>> } >>>>> >>>>> session = SessionFactory.OpenSession(); >>>>> connection = session.Connection; >>>>> new SchemaExport(Configuration) >>>>> .SetOutputFile(".\\sqlite.sql") >>>>> .Execute(true, true, false, connection, Console.Out); >>>>> >>>>> } catch (Exception ex) { >>>>> throw; >>>>> } >>>>> } >>>>> >>>>> >>>>> public void Dispose() { >>>>> session.Dispose(); >>>>> } >>>>> } >>>>> } >>>>> >>>>> >>>>> when i run the test it goes fine until it gets to the Save step at >>>>> which point it throws an exception and the test details says there's no >>>>> persister. I'm not certain what I'm doing wrong. I don't have any >>>>> hbm.xml >>>>> files to add as Embedded Resources (but I thought that was the point of >>>>> Mapping ByCode). I would appreciate any suggestions. >>>>> >>>>> Also all the NHibernate Getting Started samples I can find are for >>>>> v3.1.0 of NHibernate or even more often v2.1.x or similar. Are there any >>>>> Getting Started samples using v3.3.3? If anyone has a working Visual >>>>> Studio Solution using NHibernate v3.3.3 and could send it to me or post it >>>>> somewhere, that would be much appreciated. Thanks in advance. Have a >>>>> great day! >>>>> >>>>> >>>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "nhusers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/nhusers. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/nhusers. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nhusers. For more options, visit https://groups.google.com/d/optout.
