Отображение списка реализаций интерфейса с Fluent NHibernate - PullRequest
2 голосов
/ 24 июля 2011

Я получаю следующую ошибку при использовании следующих отображений:

NHibernate.MappingException: Association references unmapped class: GeoTriggers.Domain.Entities.ITrigger

Сущности:

public class Profile
{
    public virtual int Id { get; set; }
    public virtual string Password { get; set; }
    public virtual string Username { get; set; }
    public virtual IList<ITrigger> Triggers { get; set; }        
}

public interface ITrigger
{
    int Id { get; set; }
    decimal Latitude { get; set; }
    decimal Longitude { get; set; }
    decimal Radius { get; set; }
}

public class EmailTrigger : ITrigger
{
    public virtual string RecipientAddress { get; set; }
    public virtual string SenderAddress { get; set; }
    public virtual string Subject { get; set; }
    public virtual string Body { get; set; }

    #region ITrigger Members

    public virtual int Id { get; set; }
    public virtual decimal Latitude { get; set; }
    public virtual decimal Longitude { get; set; }
    public virtual decimal Radius { get; set; }

    #endregion
}

Использование следующих карт классов:

public sealed class ProfileMap : ClassMap<Profile>
{
    public ProfileMap()
    {
        HasMany(x => x.Triggers).Cascade.All();
    }
}

public sealed class TriggerClassMap : ClassMap<ITrigger>
{
    public TriggerClassMap()
    {            
    }    
}

public sealed class EmailTriggerClassMap : SubclassMap<EmailTrigger>
{
    public EmailTriggerClassMap()
    {            
    }
}

Использование следующей конфигурации FluentNHibernate:

FluentConfiguration fluent = Fluently.Configure(_configuration)
                .Mappings(
                    x => x.AutoMappings.Add(
                        AutoMap.Assemblies(typeof (TEntity).Assembly).Where(
                            assembly => assembly.Namespace.Contains("Entities"))));

Все мои сущности находятся в пространстве имен, которое включает в себя слово «Entities».Я сделал это, чтобы избежать необходимости наследования всех моих сущностей от общей базы.

Я пытаюсь свести мою конфигурацию к минимуму, поэтому я решил позволить Fluent NHibernate работать без ограничений по умолчанию.Обычно у меня даже нет файлов карт классов.Но теперь, поскольку я пытаюсь отобразить список объектов, которые реализуют общий интерфейс, он стал залипшим.

Ошибка говорит о том, что ассоциация (я предполагаю, что один-ко-многим в ProfileMap) ссылается на несопоставленный класс (ITrigger).Согласно документам, все, что мне нужно, это карта классов для базового интерфейса и карты подклассов для реализаций.У меня есть это.Чего мне не хватает?

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