Fluent NHibernate - Map 2 tables to one class

匿名 (未验证) 提交于 2019-12-03 02:00:02

问题:

I have a table structure something like this

table Employees  EmployeeID  EmployeeLogin  EmployeeCustID  table Customers  CustomerID  CustomerName

What i would like is to map the structure above to one single class named:

Class Employee  EmployeeID  EmployeeLogin  EmployeeName

How do i do that with fluent nhibernate ?

回答1:

I don't know if it is possible with fluent, but in xml you use the join element:

simplified:

                          

See this post by Ayende



回答2:

I agree with Frans above but if you're stuck with someone else's code and have to use the existing structure, you can can use WithTable.

public class EmployeesMap : ClassMap {     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; } }


回答3:

I have not tried this since Fluent NHibernate went to 1.0 so my syntax may be incorrect. I'm pretty sure this will only work if Customer.CustomerId is a foreign key to Employee.

public class EmployeeMap : ClassMap {   public EmployeeMap()   {     Id(x => x.EmployeeId);     Map(x => x.EmployeeLogin);      Table("Customer", m =>     {       m.Map(x => x.EmployeeName, "CustomerName");     });   } }


回答4:

Is EmployeeCustID unique? If not, this is never going to work, as you then try to cram two different entity types into 1. Also, with your structure, how do you want to save an instance? -> the CustomerID isn't known, so you can't save such an entity.

IMHO it's better to simply keep Customer as a related entity to Employee, as (I assume) the EmployeeCustID is used to link a Customer entity to an Employee entity if the employee is also a customer, which means 'customer' is just a role for employee and therefore optional and changeable and thus should be a separate entity.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!