9

nhibernate で単純なデータ構造をマップしようとしています

テーブル:

Employees
employeeID int
username varchar(30)
departmentID int

Departments
departmentID int
deptName varchar(50)

私の部門のマッピングは次のようになります。

public class DepartmentMap: ClassMap<Department>
{
    public DepartmentMap()
    {
        Id(m => m.DepartmentID).Column("departmentID");
        Map(m => m.DepartmentName).Column("deptName").Length(50);

        HasMany(m => m.Employees);

        Table("Departments");
    }
}

...そして従業員マッピング

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Id(x => x.EmployeeID, "employeeID");
        Map(x => x.UserName, "username").Length(30);

        References<Department>(x => x.Department, "departmentID");

        Table("Employees");
    }
}

部門をループして、各部門からすべての従業員を取得しようとしています:

foreach (var i in _directoryData.DepartmentCollection)
{
    foreach (var e in i.Employees)
    {
        Debug.WriteLine(i.DepartmentName + " " + e.UserName);
    }
}

「」というエラーが表示Invalid column name 'Department_id'.されます...生成されたクエリでは、department_idも使用されます。部門をループして部門名を出力すると、正常に機能します。

departmentID の正しい列名を取得するために何が欠けているのか分かりませんか? 念のため、私のモデルオブジェクトは次のとおりです。

public class Department
{
    public virtual int DepartmentID { get; set; }
    public virtual string DepartmentName { get; set; }

    public virtual ICollection<Employee> Employees { get; set; }
}

public class Employee : PersistentEntity
{
    public virtual int EmployeeID { get; set; }
    public virtual string UserName { get; set; }

    public virtual Department Department { get; set; }
}
4

3 に答える 3

15

「外部キー」が として作成されるように、Fluent NHibernate規則を作成します。HasMany<'Name'>ID

または、部門のマッピングを変更します。

 HasMany(m => m.Employees).KeyColumns.Add("DepartmentID")
于 2011-05-11T16:53:29.730 に答える
11

キー列を指定する必要があります。

HasMany(m => m.Employees).KeyColumn("DepartmentId");
于 2011-05-11T16:53:41.430 に答える
2

ドキュメントKeyColumnで説明されているように、HasMany宣言でメソッドを使用する必要があります

于 2011-05-11T16:56:22.963 に答える