2015-04-29 31 views
0

我用流利的NHibernate和有2个实体:为什么流利的nhibernate automapping会创建许多外键而不是一个?

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创建这个simpliest实体错误的架构。这就是FNH创造了我的DB:

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

我不明白为什么FNH创建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,但我不想使用它,因为我不明白为什么我应该建立的每一件事情由我的手,如果我使用automappings应该做所有的工作对我来说(至少在我的实体中最简单明显的映射)。

回答

0

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

功能NHibernate自动映射的工作原理与约定,具体HasManyConvention映射关系创建一个基于名称的外键的名称(而不是类型)的参考实体(在这种情况下,USER)

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

+0

**您正在映射一对多的关系以及另一方面的0对1的关系** - 不明白这一点。我有用户作者的类文档和用户列表的文档。我认为这对用户来说是1到1,对于Document来说是1到1。所以,我不明白你为什么说我有0比1和1比1. – user3649516

+0

对不起,我没有明白你的观点。我现在得到它。 – Hellraiser

+0

我修改了答案。希望能帮助到你 – Hellraiser

相关问题