0

我在映射时遇到问题。

我的数据库中有两个表,如下所示:Employee 和 EmployeeManagers

员工

EmployeeId int 名称 nvarchar

员工经理

EmployeeIdFk int ManagerIdFk int

所以员工可以有0个或多个经理。经理本身也是员工。

我有以下类来代表员工和经理

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

我没有任何类来代表经理,因为我认为没有必要,因为经理本身就是员工。

我正在使用自动映射,我只是不知道如何将这个类映射到这两个表。我正在实现 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 表(例如复合键)施加约束,因此不能多次将同一经理分配给员工。

有人可以帮我解决这个问题吗?

等待纳比尔

4

2 回答 2

0

我做了这样的事情,也许它可以帮助你开始?

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

编辑 opps 我可以看到它的多个经理

骨头

于 2010-06-15T12:00:18.013 回答
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" );            

    }
}
于 2010-06-23T10:31:19.717 回答