为什么流畅的nhibernate自动化会创建许多外键而不是一个?

时间:2015-04-29 07:03:20

标签: c# nhibernate fluent-nhibernate

我使用Fluent Nhibernate并拥有2个实体:

public class Document
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual User Author { get; set; }
    public virtual DateTime Date { get; set; }
}

public class User
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual IList<Document> Docs { get; set; }
    public User()
    {
        Docs = new List<Document>();
    }
}

我不明白为什么fnh会在这个最简单的实体上创建错误的架构。这就是fnh在我的数据库中创建的内容:

a busy cat http://i008.radikal.ru/1504/4b/25dcc9148f7e.png

我无法理解为什么fnh会为User表创建2个引用(Author_id和User_id)而不是单个引用(只有Author_id)。

我在Fluent Nhibernate AutoMapping -- 2 foreign keys to same table?Fluent NHibernate Automappings generating 2 foreign keys for 1 relationship找到了解决方法,但我不想使用它,因为我不明白为什么如果我使用自动化,我应该用手来设置每一件事应该为我做所有工作(至少是我实体中最简单和明显的映射)。

1 个答案:

答案 0 :(得分:0)

您有一个Document实体通过名为Author的属性引用User实体(0-1关系),但同时,在User实体中,您以一对多的关系引用Document。

Fluent NHibernate自动化与约定一起使用,并且特定的HasManyConvention根据引用实体的NAME(而不是类型)映射创建外键名称的关系(在本例中为USER)

所以NHibernate在创建User和Document之间的关系时,会在Document表中创建一个User_Id键。这是一种正确的约定行为。