Свободное отображение NHibernate словарь с ключом, который является компонентом - PullRequest
2 голосов
/ 12 октября 2011

Я создал следующие два класса с соответствующими сопоставлениями:

public class ParentClass
{
    public int Id { get; set; }
    public IDictionary<YearMonth, ChildClass> SomeMap { get; set; }
}

public class ParentClassMap : ClassMap<ParentClass>
{
    public ParentClassMap()
    {
        Table("ParentClass");
        Id(x => x.Id);
        HasMany(x => x.SomeMap)
            .Table("ChildClass")
            .KeyColumn("ParentId")
            .AsMap(x => x.YearMonth);
    }
}

public class ChildClass
{
    public int Id { get; set; }
    public YearMonth YearMonth { get; set; }
}

public class ChildClaassMap : ClassMap<ChildClass>
{
    public ChildClaassMap()
    {
        Table("ChildClass");
        Id(x => x.Id);
        Component(x => x.YearMonth, x =>
        {
            x.Map(Reveal.Member<YearMonth>("_dateTime"))
                .Access.Field()
                .Column("`Date`");
        });
    }
}

При тестировании сопоставления для ParentClass выдается следующая ошибка:

[TestFixture]
public class ParentClassMapTests : IntegrationTestBase
{
    [Test]
    public void Should_be_retrievable()
    {
        new PersistenceSpecification<ParentClass>(GetSession(), new PersistentObjectEqualityComparer())
            .CheckProperty(Reveal.Member<ParentClass>("_dataDictionary"), new Dictionary<YearMonth, BenchmarkPieceData> { { new YearMonth(2010, 1), new BenchmarkPieceData(null, new YearMonth(2010, 1), 0) } })
            .VerifyTheMappings();
    }
}


NHibernate.MappingException : Could not determine type for: BenchmarkPlus.CommonDomain.ValueObjects.YearMonth, BenchmarkPlus.CommonDomain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, for columns: NHibernate.Mapping.Column(YearMonth)
at NHibernate.Mapping.SimpleValue.get_Type()
at NHibernate.Mapping.SimpleValue.IsValid(IMapping mapping)
at NHibernate.Mapping.IndexedCollection.Validate(IMapping mapping)
at NHibernate.Cfg.Configuration.ValidateCollections()
at NHibernate.Cfg.Configuration.Validate()
at NHibernate.Cfg.Configuration.BuildSessionFactory()
NHibernate\SessionFactoryBuilder.cs(24,0): at BenchmarkPlus.RMS.Infrastructure.NHibernate.SessionFactoryBuilder.BuildFactory()
NHibernate\SessionFactoryBuilder.cs(13,0): at BenchmarkPlus.RMS.Infrastructure.NHibernate.SessionFactoryBuilder..ctor(IConfigurationFactory configurationFactory)

Если тип меняется с YearMonth на DateTime, отображение работает нормально. Должен ли я быть в состоянии сопоставить с IDictionary с моим типом YearMonth в качестве ключа? Если так, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...