У меня проблемы с отображением отношений M: 1 между Petition и PetitionSignature в NHibernate. Это тот тип отношений, который я описал раньше, но сейчас я просто не могу заставить его работать.
Метод, который я пытаюсь вызвать в своем провайдере, предназначен для возврата коллекции PetitionSignatures на основе объекта Petition, который был передан в:
public IList<PetitionSignature> GetByPetition(Petition p)
{
IList<PetitionSignature> Signatures = (IList<PetitionSignature>)_session.CreateCriteria(typeof(PetitionSignature))
.Add(Restrictions.Eq("Petition", p))
.AddOrder(Order.Desc("Id")).List();
return Signatures.OrderBy(sig => sig.Date).ToList();
}
Мой класс Петиции определяется как:
public class Petition : IPetition
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string Text { get; set; }
public virtual string Slug { get; set; }
public virtual DateTime Date { get; set; }
public virtual IList<PetitionSignature> Signatures { get; set; }
}
Мой класс PetitionSignature определяется как:
public class PetitionSignature : IPetitionSignature
{
public virtual int Id { get; set; }
public virtual Petition Petition { get; set; }
public virtual string Name { get; set; }
public virtual string EmailAddress { get; set; }
public virtual string PhoneNumber { get; set; }
public virtual string StreetAddress { get; set; }
public virtual DateTime Date { get; set; }
public virtual bool OkToEmail { get; set; }
}
Документ для сопоставления моей петиции:
<id name="Id" column="Id" type="int">
<generator class="native" />
</id>
<property name="Title" column="Title"></property>
<property name="Text" column="Text"></property>
<property name="Date" column="Date"></property>
<property name="Slug" column="Slug"></property>
<bag name="Signatures" lazy="true" cascade="all-delete-orphan" inverse="true">
<key column="Id"/>
<one-to-many class="PetitionSignature"/>
</bag>
И мой документ сопоставления PetitionSignature выглядит следующим образом:
<property name="Name" column="Name"></property>
<property name="EmailAddress" column="EmailAddress"></property>
<property name="Date" column="Date"></property>
<property name="OkToEmail" column="OkToEmail"></property>
<property name="PhoneNumber" column="PhoneNumber"></property>
<property name="StreetAddress" column="StreetAddress"></property>
<many-to-one name="Petition" class="Petition" column="Petition" cascade="all" />
Вот столбцы моей таблицы петиций:
![Petition Table](https://i.stack.imgur.com/fThlF.png)
И вот столбцы моей таблицы PetitionSignature:
![PetitionSignature Table](https://i.stack.imgur.com/HvaZX.png)
Так вот что происходит. Я запускаю тест интеграции в режиме отладки и проверяю это. Я без проблем увлажняю свой объект Petition и передаю его этому методу в классе PetitionSignatureProvider. Вот когда это происходит:
![Exception Time!](https://i.stack.imgur.com/gbpaE.png)
Конечно, это преобразование может быть сделано. При создании другого метода в поставщике, который принимает PetitionId, преобразование выполняется нормально. Это наводит меня на мысль, что проблема в моем отображении, показанном выше.
Есть идеи?