2012-07-12 56 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