如何映射? HasOne x参考

时间:2010-05-06 18:52:38

标签: nhibernate fluent-nhibernate nhibernate-mapping

我需要逐一进行映射,我有些疑惑。我有这个课程:

public class DocumentType {    
    public virtual int Id { get; set; }    
    /* othes properties for documenttype */  
    public virtual DocumentConfiguration Configuration { get; set; }
    public DocumentType () { } 
}

public class DocumentConfiguration {
   public virtual int Id { get; set; }
   /* some other properties for configuration */   
   public virtual DocumentType Type { get; set; }

  public DocumentConfiguration () { }
}

DocumentType对象只有一个DocumentConfiguration,但它不是一个继承,它只是一个一个且唯一的,用于分隔属性。

在这种情况下,我的映射应该如何?我应该使用References还是HasOne?有人可以举个例子吗?

当我加载DocumentType对象时,我想自动加载属性Configuration(在documentType中)。

非常感谢你们!

干杯

2 个答案:

答案 0 :(得分:0)

如果这种关系真的是一对一的......那么使用HasOne: - )

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-onetoone。它有你需要知道的一切。

答案 1 :(得分:0)

即使您的域中有一对一,您的关系模型也可能是一对多的。我怀疑你在两个表上共享相同的PK,更有可能你在DocumentConfiguration for DocumentType上有FK。在这种情况下,您可以将其映射为这样,因为您映射的是您的关系模型。所以在DocumentType上它将是HasOne.Inverse.AllDeleteOrphan ...而在DocumentConfiguration上它将是“References”。

现在,域名应该在您描述时公开它。

public class DocumentConfiguration 
{
    public DocumentConfiguration() 
    {
        _internalDocumentConfigurations = new List<DocumentConfiguration>(1);
    }  

   private IList<DocumentConfiguration> _internalDocumentConfigurations
   public virtual DocumentType Type 
   { 
     get 
     { 
        return _internalDocumentConfigurations.FirstOrDefault();
     } 
     /**/WARNING - no setter here**
   }
   public virtual SetDocumentConfiguration(DocumentConfiguration config)
   {
      //add your asserts here
      Add(config);
   }

   private virtual Add (DocumentConfiguration config)
   {
     //add your asserts here
      _internalDocumentConfigurations.Add(config)
       config.DocumentType = this;
   }

  public virtual Remove (DocumentConfiguration config)
  {
      _internalDocumentConfigurations.Remove(config)
      config.DocumentType = null;
  }

}

public class DocumentConfiguration {
   public virtual int Id { get; set; }
   /* some other properties for configuration */   
   public virtual DocumentType Type { get;  protected internal set; }