Свободная проблема отображения NHibernate (переопределить) - PullRequest
0 голосов
/ 19 апреля 2011

Я попытался сделать отображение наследования. Есть два альтернатива. Одна альтернатива с JoinedSubClass (то есть устарел и дай мне предупреждение) а другой и новее с SubClassMap.

Но я получаю ошибку, что у меня есть дубликат сопоставления сущности / объекта. Какие может быть проблема?

С JoinedSubClass он работает. Вот коды моих двух объектов и MappingFile с JoinedSubClass, который работает, позже есть код моего файла сопоставления с «SubClassMap», который не запускается ....

Объекты:

public class Person {

   public virtual int Id { get; private set; }
   public virtual string Vorname { get; set; }
   public virtual string Nachname  { get; set; }
   public virtual string Email { get; set; }
   public virtual Adresse Adresse { get; set; }

   public Person() {
   }
}

public class PersonQuelle : Person, IQuelle {

   public virtual string Beschreibung { get; set; }
   public virtual Institution Institution { get; set; }
   public virtual IList<MediaDatei> MediaDateien { get; set; }

   public PersonQuelle() {
       MediaDateien = new List<MediaDatei>();
   }

   public virtual void HinzufuegenMediaDatei(MediaDatei mediaDatei) {
       mediaDatei.PersonQuelle = this;
       MediaDateien.Add(mediaDatei);
   }

public virtual void LoeschenMediaDatei(MediaDatei mediaDatei)
{
       mediaDatei.PersonQuelle = null;
       MediaDateien.Remove(mediaDatei);
   }
}

Файлы сопоставления:

public class PersonMap : ClassMap<Person> {

   public PersonMap() {
       Id(x => x.Id);
       Map(x => x.Vorname);
       Map(x => x.Nachname);
       Map(x => x.Email);
       References(x => x.Adresse);

       JoinedSubClass<PersonQuelle>("personQuelle_Id", m => {
           m.Map(c => c.Beschreibung);
           m.References(c => c.Institution);
           m.HasMany(c => c.MediaDateien).Inverse().Cascade.All();
       });

       JoinedSubClass<MMAdminBenutzer>("mmAdminBenutzer_Id", m =>
       {
           m.Map(c => c.Kuerzel);
           m.Map(c => c.Passwort);
           m.Map(c => c.Benutzerrolle);
           m.HasMany(c => c.MediaDateien).Inverse().Cascade.All();
           m.HasMany(c => c.Kategorien).Inverse().Cascade.All();
       });

   }
 }

Но почему он не запускается, когда я делаю это с теми же объектами, однако с этим файлом сопоставления ??

Файл сопоставления с SubClassMap:

public class PersonMap : ClassMap<Person> {

   public PersonMap() {
       Id(x => x.Id);
       Map(x => x.Vorname);
       Map(x => x.Nachname);
       Map(x => x.Email);
       References(x => x.Adresse);
   }
 }

public class PersonQuelleMap : SubclassMap<PersonQuelle>
{
   PersonQuelleMap()
   {
       Map(c => c.Beschreibung);
       References(c => c.Institution);
       HasMany(c => c.MediaDateien).Inverse().Cascade.All();
   }
}

1 Ответ

0 голосов
/ 19 апреля 2011

Трудно сказать без полученной ошибки, но я думаю, что вам не хватает звонка на KeyColumn("personQuelle_Id") в вашем SubclassMap.

...