我使用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找到了解决方法,但我不想使用它,因为我不明白为什么如果我使用自动化,我应该用手来设置每一件事应该为我做所有工作(至少是我实体中最简单和明显的映射)。
答案 0 :(得分:0)
您有一个Document实体通过名为Author的属性引用User实体(0-1关系),但同时,在User实体中,您以一对多的关系引用Document。
Fluent NHibernate自动化与约定一起使用,并且特定的HasManyConvention根据引用实体的NAME(而不是类型)映射创建外键名称的关系(在本例中为USER)
所以NHibernate在创建User和Document之间的关系时,会在Document表中创建一个User_Id键。这是一种正确的约定行为。