Свободный NHibernate и составной идентификатор с именем одного столбца

Вы уже опубликовали это в Google FNH Group, но здесьS совок:

У меня есть таблица в устаревшей базе данных, которая имеет составной идентификатор. Ну, PK подразумевается, так как таблица неФактически, PK определен, но естественным PK является комбинация столбцов WORKORDERID и IMAGEPATH:

CREATE TABLE [WORKORDERIMG](
       [WORKORDERID] [varchar](50) NULL,
       [IMAGEPATH] [varchar](250) NULL,
       [WOTASKID] [numeric](10, 0) NULL,
       [ATTACHEDBY] [nvarchar](100) NULL,
       [COMMENTS] [nvarchar](256) NULL,
       [DATETIMEATTACHED] [datetime] NULL
) ON [PRIMARY]

Я определил эту карту классов:

   /// 
   /// NHibernate mapping for workorder attachments
   /// 
   public class AttachmentMap : ClassMap
   {
       public AttachmentMap()
       {
           SchemaIs(Resources.DatabaseSchema);
           WithTable(ObjectNames.TableWorkorderAttachment);
           UseCompositeId()
               .WithKeyProperty(x => x.ParentId, "WORKORDERID")
               .WithKeyProperty(x => x.FileLocation, "IMAGEPATH");
           Map(x => x.AttachedByUser, "ATTACHEDBY").WithLengthOf(100).Nullable();
           Map(x => x.AttachedOn, "DATETIMEATTACHED").Nullable();
           Map(x => x.Comments).Nullable().WithLengthOf(256);
           References(x => x.ParentWorkorder).FetchType.Join();
       }
   }

Для этого класса:

public class Attachment
{
   public virtual string ParentId { get; set; }
   public virtual string FileLocation { get; set; }
   public virtual Workorder ParentWorkorder { get; set; }
   public virtual string AttachedByUser { get; set; }
   public virtual string Comments { get; set; }
   public virtual DateTime? AttachedOn { get; set; }

   public override bool Equals(object obj)
   {
       return this.IsEqual(obj);
   }

   public override int GetHashCode()
   {
       return HashCodeGenerator.GenerateHashCode(new object[] { FileLocation, ParentId });
   }
}

Теперь я знаю, что должен определить столбец WORKORDERID в карте классов для строки References. С этим исключенным я получаю ожидаемую ошибку:

NHibernate: INSERT INTO azteca.WorkOrderImg (ATTACHEDBY,
DATETIMEATTACHED, Comments, ParentWorkorder_id, WORKORDERID,
IMAGEPATH) VALUES (@p0, @p1, @p2, @p3, @p4, @p5);@p0 = 'SYSTEM', @p1 = 3/15/2009 12:00:00 AM, @p2 = 'Some comment', @p3 = NULL, @p4 = NULL, @p5 = 'some ile\location'

System.Data.SqlClient.SqlException: Invalid column name 'ParentWorkorder_id'.

Однако, когда я включаю его, я получаю Fluent NHibernate, пытающийся добавить столбец WORKORDERID к запросу дважды: I '

System.IndexOutOfRangeException: Invalid index 5 for this SqlParameterCollection with Count=5.

пробовал каждую комбинацию, о которой я могу думать, безрезультатно Я'm тестирую отображение с помощью этого кода:

       [Test]
       public void Can_persist_an_attachment()
       {
           var sf = ObjectFactory.GetNamedInstance   (ObjectMother.Datasource);

           using (ISession session = sf.OpenSession())
           {
               new PersistenceSpecification(session)
                   .CheckProperty(x => x.AttachedByUser, "SYSTEM")
                   .CheckProperty(x => x.AttachedOn, new DateTime(2009, 3, 15))
                   .CheckProperty(x => x.Comments, "Some comment")
                   .CheckProperty(x => x.FileLocation, "some\file\\location")
                   .VerifyTheMappings();
           }
       }

Любая помощь приветствуется.

Ответы на вопрос(1)

Ваш ответ на вопрос