Mappings fail to add from assembly
I'm struggling with setting up Fluent mappings with NHibernate in a project. With a working project to copy from - I still end up with no mappings and subsequently the exception FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
No clues in either PotentialReasons or InnerException as I gather though...
I've used the suggested method calls from the Fluent documentation and only split them across lines to be able to debug. The call to BuildSessionFactory
fails, and no xml files are exported in the previous call.
What am I missing? Any ideas or suggestions? Getting more gray hair by the minute...
All these classes live in the same assembly, in different namespaces.
SessionFactoryCreator class: (part of)
var a = Fluently.Configure();
var cs = MsSqlConfiguration.MsSql2005
.ConnectionString(c => c.FromConnectionStringWithKey("AlarmD开发者_如何学编程ataDb"));
var b = a.Database(cs);
var d = b.Mappings(x => x.FluentMappings.AddFromAssemblyOf<Mappings.AlarmData>()
.ExportTo(@"C:\"));
var e = d.BuildSessionFactory();
_sessionFactory = e;
Mapping class:
public class AlarmData : ClassMap<AlarmTemp>
{
public AlarmData()
{
Table("PublishOperationMessage");
Id(s => s.OperationMessageId, "OperationMessageId");
}
}
DTO class:
public class AlarmTemp : Base
{
public virtual int OperationMessageId { get; private set; }
}
EDIT
Stacktrace of the innermost exception (some words are in swedish, but you'll get it):
vid FluentNHibernate.MappingModel.TypeReference..ctor(Type type)\r\n vid FluentNHibernate.Mapping.IdentityPart.FluentNHibernate.Mapping.Providers.IIdentityMappingProvider.GetIdentityMapping()\r\n vid FluentNHibernate.Mapping.ClassMap1.FluentNHibernate.IMappingProvider.GetClassMapping()\r\n vid FluentNHibernate.PersistenceModel.BuildSeparateMappings(Action1 add)\r\n vid FluentNHibernate.PersistenceModel.BuildMappings()\r\n vid FluentNHibernate.PersistenceModel.EnsureMappingsBuilt()\r\n vid FluentNHibernate.PersistenceModel.WriteMappingsTo(Func2 writerBuilder, Boolean shouldDispose)\r\n vid FluentNHibernate.PersistenceModel.WriteMappingsTo(String folder)\r\n vid FluentNHibernate.Cfg.FluentMappingsContainer.Apply(Configuration cfg)\r\n vid FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg)\r\n vid FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration()
You have to have a default constructor in AlarmTemp.
Ok, this is so weird. I googled the stacktrace message and ended up on this page:
http://geekswithblogs.net/rupreet/archive/2005/12/21/63740.aspx
So, desperate to do anything, I quit VS, deleted the bin folders, restarted VS and built. Guess what - it works now. :-)
精彩评论