NHibernate 3.2按惯例映射生成不必要的外键列

时间:2012-03-29 13:51:58

标签: nhibernate nhibernate-mapping

我有几个看起来像这样的课程:

public class Client
{
    public int Id {get;set;}
    public string Name {get;set;}
}

public class User
{
    public int Id {get;set;}
    public string Email {get;set;}
    public Client Client {get;set;}
}

我正在使用来自NHibernate 3.2的ConventionModelMapper和SchemaUpdate在我的SQL Server数据库中生成模式,我希望User类的Client属性映射到带有外键的ClientId列。我的约定代码如下所示:

mapper.AfterMapManyToOne += (inspector, member, map) =>
{
    map.Column(member.LocalMember.Name + "Id");
    // ...
};

这是有效的,因为我得到一个映射为外键的列ClientId,但我最终还得到一个Client列,它也被映射为外键。似乎NHibernate将Client属性视为标准Property(从而为其生成Client列),以及ManyToOne属性(导致额外的ClientId列)。如何阻止生成Client

1 个答案:

答案 0 :(得分:0)

我刚刚复制了您的EXACT代码,并且在将属性设置为虚拟后,行为是预期的(有一个列,ClientId)