4

我无法让 Fluent Nhibernate Automapper 创建我想要的东西。我有两个实体,它们之间存在一对多的关系。

class Person
    {
        public string name;
        IList<departments> worksIn;

    }

    class Department
    {
        public string name;
    }

以上显然是简单的框架,但我希望生成以下内容的充实模式:

Person{id, name}
Department{id, name}
PersonDepartment{id(FK person), id(Fk Department)}

不幸的是,我得到的是:

Person{id, name}
Department{id, name, personid(FK)}

我不希望在部门表中包含 Person 的 FK,我想要一个单独的联接/查找表(上面的 PersonDepartment),其中包含两个表的主键作为复合 PK 和 Fks。

我不确定我是否错误地绘制了我的初始类(也许应该只是 LIst workIn - 表示 id,而不是 List worksIn),或者我是否需要手动映射它?

这可以做到吗?

4

1 回答 1

0

类的结构方式表明了一对多的关系(实际上这就是您在问题中描述它的方式),因此 FNH 选择以这种方式对数据库关系进行建模也就不足为奇了。

正如您所建议的,可以手动创建多对多表映射。但是,这绝对是你想要的吗?

我倾向于发现纯粹的多对多关系很少见,通常有一个很好的案例来引入一个中间实体并使用两个一对多关系。这为向链接添加额外信息(例如,一个人的“主要”部门,或者他们每个部门内的办公室的详细信息)留下了可能性。

一些示例“基本”类说明了这种结构:

public class Person
{
    public int Id { get; set;}

    public string Name { get; set;}

    public IList<PersonDepartment> Departments { get; set; }
}

public class PersonDepartment
{
    public int Id { get; set; }

    public Person Person { get; set; }

    public Department Department { get; set; }

    public bool IsPrimary { get; set; }

    public string Office { get; set; }
}

public class Department
{
    public int Id { get; set; }

    public IList<PersonDepartment> Personnel { get; set; }

    public string Name { get; set; }
}
于 2011-09-26T21:35:58.713 回答