我正在尝试 Fluent NHibernate 的自动映射功能,当我尝试移动时,构建 SessionFactory
时使用显式 ClassMap
配置的相同代码失败它自动映射。
代码如下:
public static ISessionFactory GetSessionFactory()
{
if (_sessionFactory == null)
{
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("DB")))
// It works with the following:
// .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Customer>())
// It fails with this:
.Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<Customer>()))
.BuildSessionFactory();
return _sessionFactory;
}
我得到的错误是:
An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
我得到 Count = 0
for PotentialReasons
并且内部异常与上面相同。
堆栈跟踪是指:
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 113
似乎我已经尝试了一切来让它工作,而我最接近的是让初始化工作只是为了得到一个 Could not find persister for...
错误,当我尝试使用 session ,但我什至不记得我是如何做到这一点的。
我使用的是带有 NHibernate 3.0、SQL 2008 数据库的 #694 版本。知道我做错了什么吗?
最佳答案
这是一个愚蠢的错误,是 Aliostad 的评论帮助我找到的。我有一个在数据库中存储为整数的枚举类型,而 NHibernate 对此感到窒息。我在设置中添加了一个 EnumConvention,如下所示:
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("DB")))
.Mappings(
m =>
m.AutoMappings.Add(AutoMap.AssemblyOf<Customer>(new AutomapConfiguration()).Conventions.
Setup(c =>
{
c.Add<PrimaryKeyConvention>();
c.Add<EnumConvention>();
c.Add<CascadeAllConvention>();
})
.IgnoreBase(typeof (EntityBase<>))
.OverrideAll(map => map.IgnoreProperty("IsValid"))))
.BuildSessionFactory();
这是枚举约定:
public class EnumConvention : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType.IsEnum);
}
public void Apply(IPropertyInstance target)
{
target.CustomType(target.Property.PropertyType);
}
}
关于c# - Fluent NHibernate automap 配置抛出模糊错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458976/