문제

유창한 nhibernate의 automapptability를 시도하고 있으며, automapping으로 이동하려고 할 때 ClassMap 구성을 빌드 할 때 Per SessionFactory 구성을 수행 할 때 실패한 동일한 코드가 실패합니다.

여기 코드가 있습니다.

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;
}
.

INKEAT 오류는 다음과 같습니다.

유효하지 않거나 불완전한 구성 A를 만드는 동안 사용되었습니다 SessionFactory. 잠재력을 확인하십시오 컬렉션 및 InnerException. 자세한 내용.

Count = 0PotentialReasons를 얻고 내부 예외는 위와 같습니다.

스택 트레이스는 다음을 나타냅니다.

fluentnhibernate.cfg.FluentConfiguration.BuildSessionFactory () D : \ Builds \ fluentnh-v1.x-nh3 \ src \ fluentnhibernate \ cfg \ fluentconfiguration.cs : 113

모든 것을 시도한 것처럼 보이는 것처럼 보입니다. 그리고 가장 가까운 곳에서는 세션을 사용하려고했을 때 Could not find persister for... 오류를 얻기 위해 초기화 작업을 수행하는 것이 었습니다. 나는 그것을 얻을 수있었습니다.

Nhibernate 3.0, SQL 2008 데이터베이스가있는 빌드 # 694를 사용하고 있습니다. 내가 뭘 잘못하고 있는지 아이디어

도움이 되었습니까?

해결책

이것은 Aliostad의 의견이 나를 찾는 데 도움이되는 바보 같은 오류였습니다.데이터베이스의 정수로 저장된 enum 유형이 있었고 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();
.

여기에 enum 협약이 있습니다 :

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);
    }
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top