2

这让我摸不着头脑,所以我希望第二双眼睛能帮助我。

设置:

我有一个名为 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") 映射该对象。那是对的吗?我在哪里会误入歧途?

感谢您的任何帮助。

4

1 回答 1

3

看起来我忘记了以下行:

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

这似乎已经清除了我的错误。

于 2009-05-29T01:30:23.227 回答