Fluent nhibernate Fluent NHibernate-将2个表映射到一个类
我有一个这样的桌子结构Fluent nhibernate Fluent NHibernate-将2个表映射到一个类,fluent-nhibernate,Fluent Nhibernate,我有一个这样的桌子结构 table Employees EmployeeID EmployeeLogin EmployeeCustID table Customers CustomerID CustomerName 我想将上面的结构映射到一个名为: Class Employee EmployeeID EmployeeLogin EmployeeName 我如何用流利的nhibernate做到这一点?EmployeeCustID是唯一的吗?如果没有,这将永远不会起作用,因为您
table Employees
EmployeeID
EmployeeLogin
EmployeeCustID
table Customers
CustomerID
CustomerName
我想将上面的结构映射到一个名为:
Class Employee
EmployeeID
EmployeeLogin
EmployeeName
我如何用流利的nhibernate做到这一点?EmployeeCustID是唯一的吗?如果没有,这将永远不会起作用,因为您将尝试将两种不同的实体类型填充到1中。另外,对于您的结构,您希望如何保存实例?->CustomerID未知,因此无法保存此类实体
IMHO最好将客户作为员工的相关实体,因为(我假设)如果员工也是客户,EmployeeCustID用于将客户实体链接到员工实体,这意味着“客户”只是员工的一个角色,因此是可选的和可更改的,因此应该是一个单独的实体。我不知道使用fluent是否可行,但在xml中您使用join元素: 简化:
<class name="Employee" table="Customers" >
<id name="CustomerID" .../>
<property name="CustomerName"/>
<join table="Employees">
<key column="EmployeeCustID" />
<property name="EmployeeLogin" />
</join>
</class>
见此自从Fluent NHibernate升级到1.0后,我就没有尝试过,因此我的语法可能不正确。我敢肯定,只有当
Customer.CustomerId
是员工的外键时,这才有效
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Id(x => x.EmployeeId);
Map(x => x.EmployeeLogin);
Table("Customer", m =>
{
m.Map(x => x.EmployeeName, "CustomerName");
});
}
}
公共类EmployeeMap:ClassMap
{
公共雇员地图()
{
Id(x=>x.EmployeeId);
Map(x=>x.EmployeeLogin);
表(“客户”,m=>
{
m、 映射(x=>x.EmployeeName,“CustomerName”);
});
}
}
我同意上面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; }
}
public class EmployeesMap:ClassMap
{
公共雇员MAP()
{
Id(x=>x.EmployeeId);
Map(x=>x.EmployeeLogin);
WithTable(“客户”,join=>
{
join.Map(m=>m.EmployeeName,“CustomerName”);
join.WithKeyColumn(“EmployeeCustID”);
});
}
}
[DataContract(IsReference=true)]
公营雇员
{
[数据成员]
公共虚拟int EmployeeId{get;set;}
[数据成员]
公共虚拟字符串EmployeeLogin{get;set;}
[数据成员]
公共虚拟字符串EmployeeName{get;set;}
}
您好,您好,您是对的,您可以从Customers表中进行连接,但我想用另一种方式进行连接。使用Employees表并在中加入Customers表,但这会导致无法使用正确的id加入,因为Customers表没有外键。为什么要做不同的操作?这有关系吗?在映射中只有这种方式。你在课堂和表格中都看不到这一点。那又怎样?在Fluent中,您将使用with table(“2ndTableName”,m=>{/*2nd table mappings*/);我刚刚读到另一条评论,说您不允许客户对员工进行FK,所以这可能不起作用。-1:这不起作用。它将尝试将员工.EmployeeId
与客户.EmployeeCustID
合并,而不是员工.EmployeeCustID
与客户.CustomerId
。。。