Ошибка автоматического сопоставления NHibernate - PullRequest
2 голосов
/ 28 мая 2009

В этот раз я почесал голову, так что я надеюсь, что вторая пара глаз поможет мне здесь.

Установка:

У меня есть базовый класс DomainEntity, который используют все мои объекты передачи данных. В основном он определяет только свойство с именем Id (которое является целым числом).

У меня есть объекты передачи данных: блог, почта, пользователь DomainEntity находится в пространстве имен Core.Domain, объекты передачи данных находятся в Core.Domain.Model

У меня есть следующий код построителя сессии:

return Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.UsingFile("c:\blog.db"))
    .Mappings(x => x.AutoMappings.Add(
        AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>()
            .Where(type => 
                type.Namespace.EndsWith("Domain.Model") &&
                !type.IsAbstract &&
                type.IsClass &&
                type.GetProperty("Id") != null)    
     )).BuildSessionFactory();

Когда я пытаюсь протестировать простой запрос, я получаю исключение приложения для приведенного выше кода (где-то), и появляется сообщение об ошибке:

System.ApplicationException: ошибка пытаясь построить карту Документ для 'Core.Domain.DomainEntity' ---> NHibernate.MappingException: не удалось скомпилируйте документ сопоставления: (XmlDocument) ---> System.IndexOutOfRangeException: индекс был за пределами массива.

Кажется, что мой код / ​​NHibernate пытается сопоставить DomainEntity, но не удается. Я думал, что мой код явно указал , а не для сопоставления этого объекта с использованием type.Namespace.EndsWith ("Domain.Model"). Это верно? Куда я тут сбиваюсь?

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 29 мая 2009

Похоже, я забыл следующую строку:

.WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity))

Итак, мой новый код автоотображения выглядит так:

return Fluently.Configure()
                .Database(SQLiteConfiguration.Standard.UsingFile("c:\\blog.db"))
                .Mappings(x => x.AutoMappings.Add(
                   AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>()
                       .WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity))
                       .Where(type =>
                           type.Namespace.EndsWith("Domain.Model") &&
                           !type.IsAbstract &&
                           type.IsClass &&
                           type.GetProperty("Id") != null)
                   )).BuildSessionFactory();

Кажется, это исправило мою ошибку.

...