Fluent NHibernate - Map 2 tables to one class

后端 未结 4 1950
花落未央
花落未央 2020-12-17 21:23

I have a table structure something like this

table Employees
 EmployeeID
 EmployeeLogin
 EmployeeCustID

table Customers
 CustomerID
 CustomerName

相关标签:
4条回答
  • 2020-12-17 21:40

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

    simplified:

    <class name="Employee" table="Customers" >
      <id name="CustomerID" .../>
    
      <property name="CustomerName"/>
    
      <join table="Employees">
        <key column="EmployeeCustID" />
        <property name="EmployeeLogin" />
      </join>
    
    </class>
    

    See this post by Ayende

    0 讨论(0)
  • 2020-12-17 21:40

    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<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; }
    }
    
    0 讨论(0)
  • 2020-12-17 21:49

    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<Employee>
    {
      public EmployeeMap()
      {
        Id(x => x.EmployeeId);
        Map(x => x.EmployeeLogin);
    
        Table("Customer", m =>
        {
          m.Map(x => x.EmployeeName, "CustomerName");
        });
      }
    }
    
    0 讨论(0)
  • 2020-12-17 21:53

    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.

    0 讨论(0)
提交回复
热议问题