2011-09-22 59 views
0

我有此設置(冷凝爲了簡潔)功能NHibernate Automappings生成2個外鍵1個關係

Class Employee 
    virtual IList<ChecklistItem> HasInitialed { get; private set; } 

Class ChecklistItem 
    virtual Employee InitialedBy { get; set; } 

當這樣生成的I獲得這些表

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

的約定所有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"); 
    } 
} 

約定多對一/參考

class ReferenceConvention : IReferenceConvention 
{ 
    public void Apply(IManyToOneInstance instance) 
    { 
     instance.Column(instance.Name + "_id"); 
    } 
} 
+0

這改變EMPLOYEE_ID到HasInitialed_id,但它仍然會產生另一個鍵 –

+0

我可以在這裏訪問關係中的「多方」嗎? –