Fluent NHibernate映射组件,一个已索引,一个未索引

Fluent NHibernate映射组件,一个已索引,一个未索引,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在验证映射测试时遇到错误: System.ApplicationException:对于属性“ANonindexedComponent” 类型应为“Generic.TheDomain.NonindexedComponent” 'Generic.TheDomain.NonindexedComponent'但获得类型为'' '通用.TheDomain.NonindexedComponent'和 System.ApplicationException:属性“IndexedComponent”应为 类

我在验证映射测试时遇到错误:

System.ApplicationException:对于属性“ANonindexedComponent” 类型应为“Generic.TheDomain.NonindexedComponent” 'Generic.TheDomain.NonindexedComponent'但获得类型为'' '通用.TheDomain.NonindexedComponent'和 System.ApplicationException:属性“IndexedComponent”应为 类型为的“Generic.TheDomain.IndexedComponent” 'Generic.TheDomain.IndexedComponent',但获得类型为'' '通用.TheDomain.IndexedComponent'

鉴于:

namespace Generic.TheDomain
{
    public class UseAIndexedComponent:DomainEntity<UseAIndexedComponent>
    {
        public virtual string NameTitle { get; private set; }
        public virtual IndexedComponent IndexedComponent { get; private set; }
    }

    public class UseANonindexedComponent:DomainEntity<UseANonindexedComponent>
    {
        public virtual string TitleName { get; private set; }
        public virtual NonindexedComponent 
            ANonindexedComponent { get; private set; }
    }

    //we want this one to have a unique index on A B C
    public class IndexedComponent
    {
        public virtual string A { get; private set; }
        public virtual string B { get; private set; }
        public virtual string C { get; private set; }

        public IndexedComponent(){}
    }

    //no unique index on this one...
    public class NonindexedComponent : IndexedComponent
    {
        public NonindexedComponent(){}
    }
}
namespace Generic.TheDomain
{
公共类UseAIndexedComponent:DomainEntity
{
公共虚拟字符串名称标题{get;private set;}
公共虚拟IndexedComponent IndexedComponent{get;private set;}
}
公共类UseANonindexedComponent:DomainEntity
{
公共虚拟字符串标题名{get;private set;}
公共虚拟非索引组件
ANonindexedComponent{get;private set;}
}
//我们希望这一个在B C上有一个唯一的索引
公共类IndexedComponent
{
公共虚拟字符串A{get;private set;}
公共虚拟字符串B{get;private set;}
公共虚拟字符串C{get;private set;}
公共IndexedComponent(){}
}
//这个没有唯一的索引。。。
公共类非索引组件:IndexedComponent
{
公共非索引组件(){}
}
}
Fluent NHibernate映射:

using FluentNHibernate.Mapping;
using Generic.TheDomain;

namespace Persistence.Mappings
{
    public class IndexedMap : ClassMap<UseAIndexedComponent>
    {
        public IndexedMap()
        {
            Table("IndexedComponent");
            Id(x => x.Id).GeneratedBy.GuidComb();
        Map(x => x.NameTitle);
        Component<IndexedComponent>(x => x.IndexedComponent);
    }
}

    public class NonIndexedMap : ClassMap<UseANonindexedComponent>
    {
        public NonIndexedMap()
        {
            Table("NonIndexedComponent");
            Id(x => x.Id).GeneratedBy.GuidComb();
            Map(x => x.TitleName);
            Component<NonindexedComponent>(x => x.ANonindexedComponent);
        }
    }

    public class IndexedComponentMap : ComponentMap<IndexedComponent>
    {
        public IndexedComponentMap()
        {
            Map(x => x.A).CustomSqlType("varchar(1)").UniqueKey("ABC");
            Map(x => x.B).CustomSqlType("varchar(1)").UniqueKey("ABC");
            Map(x => x.C).CustomSqlType("varchar(1)").UniqueKey("ABC");
        }
    }

    public class NonindexedComponentMap : ComponentMap<NonindexedComponent>
    {
        public NonindexedComponentMap()
        {
            Map(x => x.A).CustomSqlType("varchar(1)");
            Map(x => x.B).CustomSqlType("varchar(1)");
            Map(x => x.C).CustomSqlType("varchar(1)");
        }
    }
}
使用FluentNHibernate.Mapping;
使用Generic.TheDomain;
名称空间持久性映射
{
公共类索引映射:类映射
{
公共索引映射()
{
表(“IndexedComponent”);
Id(x=>x.Id).GeneratedBy.GuidComb();
Map(x=>x.nametTitle);
组件(x=>x.IndexedComponent);
}
}
公共类非索引映射:类映射
{
公共非索引地图()
{
表(“非指数成分”);
Id(x=>x.Id).GeneratedBy.GuidComb();
Map(x=>x.TitleName);
分量(x=>x.ANonindexedComponent);
}
}
公共类IndexedComponentMap:ComponentMap
{
公共IndexedComponentMap()
{
Map(x=>x.A).CustomSqlType(“varchar(1)”).UniqueKey(“ABC”);
Map(x=>x.B).CustomSqlType(“varchar(1)”).UniqueKey(“ABC”);
Map(x=>x.C).CustomSqlType(“varchar(1)”).UniqueKey(“ABC”);
}
}
公共类非索引ComponentMap:ComponentMap
{
公共非索引组件映射()
{
Map(x=>x.A).CustomSqlType(“varchar(1)”;
Map(x=>x.B).CustomSqlType(“varchar(1)”;
Map(x=>x.C).CustomSqlType(“varchar(1)”;
}
}
}
以及测试:

[Test]
public void VerifyIndexedMapping()
{
new PersistenceSpecification<UseAIndexedComponent>(Session)
        .CheckProperty(c => c.NameTitle, "jack")
    .CheckProperty(x => x.IndexedComponent, new IndexedComponent())
        .VerifyTheMappings();
}

[Test]
public void VerifyNonIndexedMapping()
{
    new PersistenceSpecification<UseANonindexedComponent>(Session)
        .CheckProperty(c => c.TitleName, "jill")
        .CheckProperty(x => x.ANonindexedComponent, new NonindexedComponent())
        .VerifyTheMappings();
}
[测试]
public void VerifyIndexedMapping()
{
新PersistenceSpecification(会话)
.CheckProperty(c=>c.NameTitle,“jack”)
.CheckProperty(x=>x.IndexedComponent,新的IndexedComponent())
.验证应用程序();
}
[测试]
公共无效验证非索引映射()
{
新PersistenceSpecification(会话)
.CheckProperty(c=>c.TitleName,“吉尔”)
.CheckProperty(x=>x.ANonindexedComponent,新的非索引组件())
.验证应用程序();
}