NHibernate создает 2 поля в отношениях один ко многим - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующие сущности, сопоставленные кодом:

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 голосов
/ 13 февраля 2019

Нашел его.

Мне также пришлось указать свое имя на стороне "один ко многим".

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);
    });
}
...