Свободное NHibernate неуместное дубликат поля - PullRequest
0 голосов
/ 09 июля 2010

Я думаю, что что-то неправильно понимаю, как это работает.Это мое беглое отображение:

public class FunctionInfoMap : ClassMap<FunctionInfo>
 {
  public FunctionInfoMap()
  {
   Id(x => x.Id);
   Map(x => x.Name);
   Map(x => x.Signature);
   Map(x => x.IsNative);
   Map(x => x.ClassId);
   References(x => x.Class, "ClassId");
   HasMany(x => x.CallsAsParent).Inverse();
   HasMany(x => x.CallsAsChild).Inverse();
   Table("Functions");
  }
 }

 public class CallMap : ClassMap<Call>
 {
  public CallMap()
  {
   CompositeId()
    .KeyProperty(x => x.ThreadId)
    .KeyProperty(x => x.ParentId)
    .KeyProperty(x => x.ChildId)
    .Mapped();
   Map(x => x.ThreadId).Index("Calls_ThreadIndex");
   Map(x => x.ParentId).Index("Calls_ParentIndex");
   Map(x => x.ChildId).Index("Calls_ChildIndex");
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");
   Table("Calls");
  }
 }

 public class SampleMap : ClassMap<Sample>
 {
  public SampleMap()
  {
   CompositeId()
    .KeyProperty(x => x.ThreadId)
    .KeyProperty(x => x.FunctionId)
    .Mapped();
   Map(x => x.ThreadId);
   Map(x => x.FunctionId);
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Function, "FunctionId");
   Table("Samples");
  }
 }

Теперь, когда я создаю эту схему в новой базе данных, это поле FunctionId из SampleMap попадает в таблицу Calls.

create table Calls (
        ThreadId INTEGER not null,
       ParentId INTEGER not null,
       ChildId INTEGER not null,
       HitCount INTEGER,
       FunctionId INTEGER,
       primary key (ThreadId, ParentId, ChildId)
    )

create table Samples (
    ThreadId INTEGER not null,
   FunctionId INTEGER not null,
   HitCount INTEGER,
   FunctionId INTEGER,
   primary key (ThreadId, FunctionId)
)

Я не знаюЯ не понимаю, почему он существует, поскольку он должен существовать только в таблице Samples.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2011

Я наконец понял проблему, более или менее. Пара коллекций в FunctionInfoMap сбивала с толку NHibernate, поскольку на самом деле они никуда не ведут. Добавление записей KeyColumn для связывания их с родительскими и дочерними ассоциациями исправило поле паразитов.

0 голосов
/ 09 июля 2010

Вы не должны отображать как внешний ключ, так и отношение многие тонны-один.Вместо

   Map(x => x.ThreadId).Index("Calls_ThreadIndex");
   Map(x => x.ParentId).Index("Calls_ParentIndex");
   Map(x => x.ChildId).Index("Calls_ChildIndex");
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");

сопоставьте многие с теми, которые используют внешние ключи

   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");

Я не знаю, решит ли это вашу проблему.Кроме того, я настоятельно рекомендую не использовать составные ключи.Замените их суррогатным ключом (идентификатором) и уникальными индексами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...