我遇到了Mapping问题。
我的数据库中有两个表,如下所示:Employee和EmployeeManagers
员工
EmployeeId int 名称nvarchar
EmployeeManagers
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>();
}
}
我没有任何类来代表Manager,因为我认为没有必要,因为Manager本身就是一名员工。
我正在使用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 :(得分:0)
我做了类似的事情,也许它可以帮助你开始?
http://www.dbones.co.uk/blog/post/2010/04/Nhib-Self-Reference-Object.aspx
编辑opps我可以看到它的多个管理员
骨
答案 1 :(得分: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" );
}
}