我有以下由代码映射的实体:
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
的字段。
我该怎么做才能摆脱这个无用的领域?
答案 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);
});
}