0 votes

Mapping Fluent Nhibernate Classe unique sur deux tables de base de données

J'ai des problèmes avec Mapping.

J'ai deux tables dans ma base de données comme suit : Employee et EmployeeManagers

Employé

EmployeeId int Nom nvarchar

EmployeeManagers

EmployeeIdFk int ManagerIdFk int

L'employé peut donc avoir 0 ou plusieurs Managers. Un manager est lui-même un employé.

J'ai la classe suivante pour représenter les Employés et les Managers

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>();
}
}

Je n'ai pas de classe pour représenter le Manager car je pense qu'il n'y en a pas besoin, puisque le Manager lui-même est un Employé.

J'utilise le mappage automatique et je n'arrive pas à trouver comment faire correspondre cette classe à ces deux tables. J'ai implémenté IAutoMappingOverride pour remplacer les mappages automatiques pour les employés, mais je ne suis pas sûr de ce qu'il faut faire.

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");
    }
}

Je veux également m'assurer qu'un employé ne peut pas se voir attribuer deux fois le même responsable. C'est quelque chose que je peux vérifier dans mon application, mais j'aimerais appliquer une contrainte à la table EmployeeManager (par exemple, une clé composite) afin qu'un même responsable ne puisse pas être affecté plusieurs fois à un employé.

Quelqu'un peut-il m'aider à résoudre ce problème ?

En attente de Nabeel

0voto

dbones Points 2242

J'ai fait quelque chose comme ça, peut-être que ça pourrait t'aider à démarrer ?

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

Edit opps je peux voir qu'il y a plusieurs managers

Bones

0voto

nabeelfarid Points 1802

Je finis par faire comme ceci

    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" );            

    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X