0

У меня есть общий тип объекта Entity и некоторые классы, которые могут относиться к Entity, такие как EntityDescription и EntityLocation (отношения «много-к-одному»).Отображение NHibernate (Fluent) абстрагирования промежуточного класса

Entity Класс:

public class Entity 
{ 
    public virtual Int64 ID { get; set; } 
    // and other properties 
} 

EntityDescription класс:

public class EntityDescription 
{ 
    public virtual Int64 ID { get; set; } 
    public virtual Entity Entity { get; set; } 
    public virtual String Description { get; set; } 
    // and other properties 
} 

EntityLocation класс:

public class EntityLocation 
{ 
    public virtual Int64 ID { get; set; } 
    public virtual Entity Entity { get; set; } 
    public virtual String Location { get; set; } 
    // and other properties 
} 

Есть целый ряд более конкретных типов объектов, например, Компания, Поставщик, Сотрудник и т. Д. Чтобы сделать вещи более интересными, EntityDescription применяется ко всем определенным типам, но только некоторым типам могут быть назначены местоположения (EntityLocation применим только к некоторым типам).

Как сопоставить эти классы в Fluent-NHibernate, чтобы список EntityLocation отображался только на некоторых определенных классах, которые могут иметь местоположения (например, компания и поставщик), а не на общем классе Entity?

// This property can exist in Entity 
public virtual IList<EntityDescription> Descriptions { get; set; } 

// I want this property to only exist in some specific types, not in Entity 
public virtual IList<EntityLocation > Locations { get; set; } 

Любая помощь оценивается. Заранее спасибо.

ответ

0

Я бы сказал, что нам нужно установить ShouldMap. Проверьте этот ответ:

FluentNHibernate - Automapping ignore property

Таким образом, мы должны ввести эту конфигурацию с различной обработкой по умолчанию свойства Locations:

public class AutoMapConfiguration : DefaultAutomappingConfiguration 
{ 
    private static readonly IList<string> IgnoredMembers = 
         new List<string> { "Locations"}; // ... could be more... 

    public override bool ShouldMap(Member member) 
    { 
     var shouldNotMap = IgnoredMembers.Contains(member.Name); 

     return base.ShouldMap(member) && !shouldNotMap; 
    } 
} 

Это сделает свойство Locations по умолчанию НЕ отображенных. Следующим шагом является использование явного сопоставления при необходимости ...

 Смежные вопросы

  • Нет связанных вопросов^_^