Pergunta

Este tem-me coçar a cabeça, por isso estou esperando um segundo par de olhos pode me ajudar aqui.

Configuração:

Eu tenho uma classe base chamada DomainEntity que toda a minha transferência de dados objetos de uso. É basicamente apenas define uma propriedade chamada ID (que é um inteiro).

Eu tenho objetos de transferência de dados: Blog, Post, Usuário DomainEntity está no Core.Domain namespace, os objetos de transferência de dados estão sob Core.Domain.Model

Eu tenho o seguinte código construtor sessão:

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();

Quando tento testar uma consulta simples, eu recebo uma exceção de aplicativo no código acima (em algum lugar) ea mensagem de erro é:

System.ApplicationException: Erro ao tentar construir o mapeamento documento para 'Core.Domain.DomainEntity' ---> NHibernate.MappingException: Não foi possível compilar o documento de mapeamento: (XmlDocument) ---> System.IndexOutOfRangeException: Índice estava fora dos limites da matriz.

Parece que meu código / NHibernate está tentando mapear DomainEntity, mas está falhando. Eu pensei que meu código acima explicitado não para mapear o objeto usando a type.Namespace.EndsWith ( "Domain.Model"). Isso está correto? Onde vou desviar aqui?

Obrigado por toda e qualquer ajuda.

Foi útil?

Solução

Parece que eu esqueci a seguinte linha:

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

Assim, em sua totalidade, meus novos olhares de código de mapeamento automático como este:

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();

Isto parece ter apagado o meu erro para cima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top