NHibernate在一对多关系中创建2个字段

时间:2019-02-13 09:18:42

标签: c# nhibernate nhibernate-mapping mapping-by-code

我有以下由代码映射的实体:

VarRecipeMapping.cs

public VarRecipeMapping()
{
    Table("var_recipe");

    // ...

    Bag(x => x.Entries, m =>
    {
        m.Cascade(Cascade.All | Cascade.DeleteOrphans);
        m.Lazy(CollectionLazy.NoLazy);
    },
    a => a.OneToMany());
}

VarRecipeEntryMapping.cs

public VarRecipeEntryMapping()
{
    Table("var_recipe_entry");

    // ...

    ManyToOne(x => x.Recipe, m =>
    {
        m.Column("var_recipe_id");
        m.NotNullable(true);
    });
}

令人讨厌的是生成的数据库(SQLite):它包含Column 定义的我的实体的所有列,以及Recipe表中未使用的var_recipe_entry

显然是由NHibernate生成的,原因是模型中有一个名为Recipe的字段。

我该怎么做才能摆脱这个无用的领域?

1 个答案:

答案 0 :(得分:0)

找到了。

我也必须在“一对多”侧指定自定义名称。

VarRecipeMapping.cs

public VarRecipeMapping()
{
    Table("var_recipe");

    // ...

    Bag(x => x.Entries, m =>
    {
        // The custom name needs to be specified here too
        m.Key(n => {
            n.Column("var_recipe_id");
        });

        m.Cascade(Cascade.All | Cascade.DeleteOrphans);
        m.Lazy(CollectionLazy.NoLazy);
    },
    a => a.OneToMany());
}

VarRecipeEntryMapping.cs

public VarRecipeEntryMapping()
{
    Table("var_recipe_entry");

    // ...

    ManyToOne(x => x.Recipe, m =>
    {
        m.Column("var_recipe_id");
        m.NotNullable(true);
    });
}