Fluent Nhibernate在两个数据库表上映射单个类

Fluent Nhibernate在两个数据库表上映射单个类,nhibernate,fluent-nhibernate,automapping,Nhibernate,Fluent Nhibernate,Automapping,我在映射方面有问题 我的数据库中有两个表:Employee和EmployeeManagers 雇员 雇员ID int 名称nvarchar 员工经理 雇员国际 ManagerIdFk int 因此,员工可以有0个或更多经理。经理本身也是一名雇员 我有以下班级代表员工和经理 public class Employee { public virtual int Id { get; set; } public virtual string Name { get; se

我在映射方面有问题

我的数据库中有两个表:Employee和EmployeeManagers

雇员

雇员ID int 名称nvarchar

员工经理

雇员国际 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>();
}
}
公共类员工
{
公共虚拟整数Id
{
收到
设置
}
公共虚拟字符串名
{
收到
设置
}
公共虚拟IList管理器
{
收到
保护集;
}
公职人员()
{
经理=新列表();
}
}
我没有任何类来代表经理,因为我认为不需要它,因为经理本身就是一名员工

我正在使用自动映射,我只是不知道如何将这个类映射到这两个表。我正在为覆盖员工的自动映射实现IAutoMappingOverride,但我不确定在其中做什么

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");
    }
}
公共类节点映射:IAutoMappingOverride
{
公共无效替代(自动映射)
{
//mapping.HasMany(x=>x.ValidParents).Cascade.All().Table(“EmployeeManager”);
//mapping.HasManyToMany(x=>x.ValidParents).Cascade.All().Table(“EmployeeManager”);
}
}
我还想确保一名员工不能被分配给同一名经理两次。这是我可以在应用程序中验证的内容,但我希望对EmployeeManager表(例如复合键)施加约束,以便不能将同一名经理多次分配给员工

外面有人能帮我吗

等待
纳比尔

我做了类似的事情,也许可以帮助你开始

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


骨头

我最后就是这样做的

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

    }
}
公共抽象类节点
{
公共虚拟整数Id
{
收到
设置
}
公共虚拟节点父节点
{
收到
设置
}
公共虚拟IList子节点
{
收到
保护集;
}
受保护节点()
{
ChildNodes=新列表();
}
公共虚拟void AddChildNode(节点childNode)
{
childNode.ParentNode=这个;
添加(childNode);
}
}
公共类节点映射:IAutoMappingOverride
{
公共无效替代(自动映射)
{
//自我参照
//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”);
}
}

新的fluent nhibernate版本1.1中的自动映射现在支持自引用。我还必须使用最新版本的fluent nhibernate,即Automapping现在支持自引用的1.1。这也帮助了我