我有一个像这样的表结构
table Employees
EmployeeID
EmployeeLogin
EmployeeCustID
table Customers
CustomerID
CustomerName
我想要的是将上面的结构映射到一个名为:
的单个类Class Employee
EmployeeID
EmployeeLogin
EmployeeName
我如何用流利的nhibernate做到这一点?
答案 0 :(得分:4)
我不知道是否可以使用流利,但在xml中你使用了join元素:
简化为:
<class name="Employee" table="Customers" >
<id name="CustomerID" .../>
<property name="CustomerName"/>
<join table="Employees">
<key column="EmployeeCustID" />
<property name="EmployeeLogin" />
</join>
</class>
请参阅此post by Ayende
答案 1 :(得分:3)
我同意上面的Frans,但如果您遇到其他人的代码并且必须使用现有结构,则可以使用WithTable。
public class EmployeesMap : ClassMap<Employees>
{
public EmployeesMap()
{
Id(x => x.EmployeeId);
Map(x => x.EmployeeLogin);
WithTable("Customers", join =>
{
join.Map(m => m.EmployeeName, "CustomerName");
join.WithKeyColumn("EmployeeCustID");
});
}
}
[DataContract(IsReference = true)]
public class Employees
{
[DataMember]
public virtual int EmployeeId { get; set; }
[DataMember]
public virtual string EmployeeLogin { get; set; }
[DataMember]
public virtual string EmployeeName { get; set; }
}
答案 2 :(得分:1)
我没有试过这个,因为Fluent NHibernate转到1.0所以我的语法可能不正确。我很确定这只有在Customer.CustomerId
是Employee
的外键时才有效。
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Id(x => x.EmployeeId);
Map(x => x.EmployeeLogin);
Table("Customer", m =>
{
m.Map(x => x.EmployeeName, "CustomerName");
});
}
}
答案 3 :(得分:0)
EmployeeCustID是唯一的吗?如果没有,这将永远不会起作用,因为您尝试将两种不同的实体类型填充到1.另外,对于您的结构,您希望如何保存实例? - &GT; CustomerID未知,因此您无法保存此类实体。
恕我直言,最好简单地将客户作为员工的相关实体,因为(我假设)如果员工也是客户,则EmployeeCustID用于将客户实体链接到员工实体,这意味着'客户'只是员工的角色,因此是可选的和可变的,因此应该是一个单独的实体。