我有这个设置(为了简洁而简化)
Class Employee
virtual IList<ChecklistItem> HasInitialed { get; private set; }
Class ChecklistItem
virtual Employee InitialedBy { get; set; }
当这个生成时,我得到这些表
Employee
Id
ChecklistItem
Id
InitialedBy_id <----
Employee_id <----
ChecklistItem有2个Employee外键,我假设Employee_id映射ChecklistItem.Employee和InitialedBy_id来映射ChecklistItem.InitialedBy。我如何告诉NHibernate这是双向关系相同,只需要1个外键?
我对NHibernate一般都很陌生,但这似乎应该是非常标准的。
这是我在配置数据库以生成正确的架构时所提出的,是不是?
.Override<Employee>(map => map
.HasMany<ChecklistItem>(x => x.HasInitialed)
.KeyColumn("InitialedBy_id"))
如果这是正确的,有没有办法根据ChecklistItem的属性名称(lambda)选择KeyColumn?
答案 0 :(得分:0)
作为所有hasmanies的惯例
class HasManyConvention : IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.Column(((ICollectionInspector)instance).Name + "_id");
}
}
或仅适用于此
class HasManyConvention : IHasManyConvention, IHasManyConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IOneToManyCollectionInspector> criteria)
{
criteria.Expect(x => x.Name == "HasInitialed"); // and/or entity type
}
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.Column(((ICollectionInspector)instance).Name + "_id");
}
}
Manytoone / References的惯例
class ReferenceConvention : IReferenceConvention
{
public void Apply(IManyToOneInstance instance)
{
instance.Column(instance.Name + "_id");
}
}