Как отобразить это? HasOne x Рекомендации - PullRequest
0 голосов
/ 06 мая 2010

Мне нужно составить карту Один за другим, и у меня есть некоторые сомнения. У меня есть эти классы:

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, но он не является наследником, он только один за другим и уникален для разделения свойств.

Какими должны быть мои отображения в этом случае? Должен ли я использовать ссылки или HasOne? Кто-нибудь может привести пример?

Когда я загружаю объект DocumentType, я хотел бы автоматически загрузить свойство Configuration (в documentType).

Большое спасибо, ребята!

Приветствия

Ответы [ 2 ]

0 голосов
/ 10 мая 2010

Несмотря на то, что в вашем домене есть один-к-одному, ваша реляционная модель, вероятно, один-ко-многим. Я сомневаюсь, что вы используете один и тот же PK в обеих таблицах, скорее всего, у вас есть FK в DocumentConfiguration для DocumentType. В этом случае вы бы отобразили это как таковое, потому что то, что вы отображаете, является вашей реляционной моделью. Таким образом, для 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; }
0 голосов
/ 07 мая 2010

Если отношение действительно один к одному ... тогда используйте HasOne: -)

См. http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-onetoone. В нем есть все, что вам нужно знать.

...