2010-06-12 2 views
0

У меня проблемы с отображением.Fluent Nhibernate Mapping Один класс на двух таблицах базы данных

У меня есть две таблицы в моей базе данных следующим образом: Сотрудник и EmployeeManagers

Сотрудник

EmployeeID ИНТ Имя NVARCHAR

EmployeeManagers

EmployeeIdFk INT ManagerIdFk INT

Так у сотрудника может быть 0 или больше Управление RS. Сам менеджер также является сотрудником.

У меня есть следующий класс для представления Работника и менеджеров

public class Employee 
{ 
public virtual int Id 
{ 
    get; 
    set; 
} 

public virtual string Name 
{ 
    get; 
    set; 
} 

public virtual IList<Employee> Managers 
{ 
    get; 
    protected set; 
} 

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

у меня нет какого-либо класса для представления диспетчера, потому что я думаю, что нет никакой необходимости в этом, так как сам руководитель является работником.

Я использую autoMapping, и я просто не могу понять, как сопоставить этот класс с этими двумя таблицами. Я реализую IAutoMappingOverride для переопределения автозаполнения для Employee, но я не уверен, что с ним делать.

public class NodeMap : IAutoMappingOverride 
{ 
    public void Override(AutoMapping<Node> mapping) 
    { 
     //mapping.HasMany(x => x.ValidParents).Cascade.All().Table("EmployeeManager"); 
     //mapping.HasManyToMany(x => x.ValidParents).Cascade.All().Table("EmployeeManager"); 
    } 
} 

Я также хочу удостовериться, что работнику нельзя назначить одного и того же менеджера дважды. Это то, что я могу проверить в своем приложении, но я хотел бы установить ограничение на таблицу EmployeeManager (например, составной ключ), чтобы один и тот же менеджер не мог назначаться сотруднику более одного раза.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

В ожидании Набиль

ответ

0

я сделал что-то вроде этого, может быть, это может помочь вам начать?

http://www.dbones.co.uk/blog/post/2010/04/Nhib-Self-Reference-Object.aspx

Редактировать OPPS я могу видеть его несколько менеджеров

Кости

+1

Автоотображение в новом Fluent NHibernate версии 1.1 теперь поддерживает само referecing , – nabeelfarid

+0

Epic! спасибо за обновление – dbones

0

я в конечном итоге делает, как этот

public abstract class Node 
    { 
     public virtual int Id 
     { 
      get; 
      set; 
     } 

     public virtual Node ParentNode 
     { 
      get; 
      set; 
     } 

     public virtual IList<Node> ChildNodes 
     { 
      get; 
      protected set; 
     } 

     protected Node() 
     { 
      ChildNodes = new List<Node>(); 
     } 

     public virtual void AddChildNode(Node childNode) 
     { 
      childNode.ParentNode = this; 
      ChildNodes.Add(childNode); 
     } 

    } 

public class NodeMap : IAutoMappingOverride<Node> 
{ 
    public void Override(AutoMapping<Node> mapping) 
    { 
     //self referencing 
     //http://stackoverflow.com/questions/1547956/fluent-nhibernate-automappings-with-self-reference 
     mapping.References(x => x.ParentNode).Column("ParentNodeFk").Cascade.SaveUpdate(); 
     mapping.HasMany(x => x.ChildNodes).Cascade.SaveUpdate().KeyColumn("ParentNodeFk");    

    } 
} 
+0

Мне также нужно использовать последнюю версию Fluent NHibernate i.e. 1.1, где теперь автомонтирование поддерживает саморегуляцию. Этот http://stackoverflow.com/questions/1547956/fluent-nhibernate-automappings-with-self-reference также помог мне – nabeelfarid

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