2012-07-12 53 views
2

我一直未能找到這個問題的答案。沒有外鍵的NHibernate地圖集合?

假設你有ClassA

public class ClassA { 
    public Guid Id { get; set; } 
    public IList<ClassB> { get; set; } 
} 

而且ClassA嵌套了ClassB對象的集合:

public class ClassB { 
    public Guid Id { get; set; } 
    public string SomeProperty { get; set;} 
} 

是否有使用NHibernate對這些對象的表映射,生成模式的任何方式,但沒有爲ClassB表創建外鍵關係?

UPDATE

想通了解決方案 - 當映射由代碼:

Bag<ClassA>(x => x.ClassB, 
      collectionMapping => { 
       collectionMapping.Table("ClassB"); 
       collectionMapping.Cascade(Cascade.All); 
       collectionMapping.Key(key => { 
         key.Column("ClassAId"); 
         key.ForeignKey("none"); 
       }); 
       collectionMapping.Lazy(CollectionLazy.NoLazy); 
      }, 
      mapping => mapping.OneToMany(x => { 
       x.Class(typeof(ClassB)); 
      }) 
    ); 
+0

難道你不希望約束或FKEY場?你如何建議ClassBTable中的行被識別爲屬於特定的ClassA而沒有引用某種類型? – Rytmis 2012-07-12 10:22:20

+0

爲了澄清,'TableB'仍然會有'ClassAId'列,我很好。我只是不希望用一個外鍵約束來生成'ClassAId'列表。 – David 2012-07-12 10:27:21

+0

[防止Nhibernate schemaexport生成外鍵約束有很多關係](http://support.microsoft.com/kb/2826725/prevent-nhibernate-schemaexport-from-generating-foreign-key-constraints-on-has -m) – Rytmis 2012-07-12 10:35:09

回答

4

我認爲,如果你設置的集合映射爲inverse="true" schema生成工具,不創建FK。

編輯:(!不知道) 的評論指出,與XML映射也許這個作品:

<many-to-one name="Bar" foreign-key="none" /> 
+0

這些都不適合我。我認爲這個問題是我把這個集合映射爲一個包。 – David 2012-07-12 12:06:12

+1

我終於搞定了!你說得對,我只是因爲XML映射和代碼映射之間的區別而弄錯了這個:'key.ForeignKey 「none」);'刪除外鍵。 – David 2012-07-12 12:39:00