c# - Fluent NHibernate automap 配置抛出模糊错误

标签 c# fluent-nhibernate automapping

我正在尝试 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/

相关文章:

fluent-nhibernate - Fluent NHibernate 自动映射类约定并未应用于整个类层次结构

c# - Fluent NHibernate 自动映射错误

c# - 获取 'T' 必须是具有公共(public)无参数构造函数的非抽象类型,才能将其用作泛型类型或方法中的参数 'T'

c# - Json字符串反序列化为对象数组列表

c# - WPF:日期时间选择器选择问题

c# - 流畅的 NHibernate 装饰实体

.net - 无法获取StrongNameKeyPair的公钥

c# - 无法设置状态代码

nhibernate - 使用 JoinQueryOver : Get greatgrandchildren, 获取知道父亲

nhibernate - 如何将 Fluent NHibernate Automapping 与实体中的多个相同类型的列表一起使用?