Как я могу использовать Быстрый NHibernate, Автоотображающийся с несколькими Списками того же типа в Объекте?

Кластеризируемый в основном означает, что данные находятся в том физическом порядке в таблице. Поэтому у Вас может быть только один на таблицу.

Некластеризованный означает, что это - "только" логический порядок.

6
задан Tom Bushell 20 November 2009 в 21:07
поделиться

1 ответ

Пол Батум ответил на мой вопрос здесь и предоставил автономный рабочий пример здесь (нажмите кнопку «Загрузить» после перехода на связанную страницу).

Следующий код скопирован из его ответа. Ключевым моментом является класс StoreMap в конце листинга, который устанавливает переопределение с помощью предложения Where, которое использует свойство IsManager в Employee.

Обратите внимание, что (по крайней мере, с v. 1.0.0.594) есть один большая проблема с Automapping - класс сопоставления (например, StoreMap) не может находиться в том же пространстве имен, что и класс домена (например, Store)!

В противном случае NHibernate выдаст "NHibernate.MappingException: (XmlDocument) (2,4): ошибка проверки XML: ... ", с абсолютно никаких указаний на то, в чем или где настоящая проблема.

Вероятно, это ошибка, которая может быть исправлена ​​в более поздних версиях Fluent NHibernate.

public class Employee 
{ 
    public virtual int Id { get; private set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual bool IsManager { get; set; } 
} 


public class Store 
{ 
    public virtual int Id { get; private set; } 
    public virtual IList<Employee> Staff { get; private set; } 
    public virtual IList<Employee> Managers { get; private set; } 


    public Store() 
    { 
        Staff = new List<Employee>(); 
        Managers = new List<Employee>(); 
    } 


    public void AddManager(Employee employee) 
    { 
        employee.IsManager = true; 
        this.Managers.Add(employee); 
    } 


    public void AddStaff(Employee employee) 
    { 
        this.Staff.Add(employee); 
    } 


} 

Вот переопределение сопоставления для магазина:

// Must be in different Namespace from class Store!!!
public class StoreMap : IAutoMappingOverride<Store> 
{ 
   public void Override(AutoMapping<Store> mapping) 
   { 
       mapping.HasMany(x => x.Managers) 
           .Cascade.All() 
           .Where("(IsManager = 1)"); 
       mapping.HasMany(x => x.Staff) 
           .Cascade.All() 
           .Where("(IsManager = 0)"); 
   } 
} 
5
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: