Неверный индекс 4 для этой SqlParameterCollection с Count = 4 - PullRequest
0 голосов
/ 02 марта 2012

У меня есть следующая модель:

public class ExchangeRate
{
    [Key, Column(Order = 1)]
    public virtual int JobId { get; set; }

    [Key, Column(Order = 2), MaxLength(3)]
    public virtual Currency Source { get; set; }

    [Key, Column(Order = 3), MaxLength(3)]
    public virtual Currency Target { get; set; }

    public virtual decimal Rate { get; set; }

    public virtual Job Job { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null)
            return false;

        var t = obj as ExchangeRate;

        if (t == null)
            return false;

        if (this.Job == t.Job & this.Source == t.Source && this.Target == t.Target)
            return true;

        return false;
    }

    public override int GetHashCode()
    {
        return (this.JobId + "|" + this.Source + "|" + this.Target).GetHashCode();
    }

У меня есть следующее переопределение AutoMapping:

public void Override(AutoMapping<ExchangeRate> mapping)
{
    mapping.Map(x => x.Source).CustomType<GenericEnumMapper<Currency>>();
    mapping.Map(x => x.Target).CustomType<GenericEnumMapper<Currency>>();

    // Define the composite key
    mapping.CompositeId()
        .KeyProperty(e => e.JobId, "JobId")
        .KeyProperty(e => e.Source)
        .KeyProperty(e => e.Target);
}

И следующий экспортированный файл сопоставления, который я экспортировал, чтобы попытаться помочь диагностировать проблему:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="JFS.Data.Model.ExchangeRate, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="ExchangeRates">
    <composite-id>
      <key-property name="JobId" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="JobId" />
      </key-property>
      <key-property name="Source" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880">
        <column name="Source" />
      </key-property>
      <key-property name="Target" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880">
        <column name="Target" />
      </key-property>
    </composite-id>
    <property name="Source" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880">
      <column name="Source" />
    </property>
    <property name="Target" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880">
      <column name="Target" />
    </property>
    <property name="Rate" type="System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Rate" />
    </property>
    <many-to-one class="JFS.Data.Model.Job, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Job">
      <column name="JobId" />
    </many-to-one>
  </class>
</hibernate-mapping>

Я большую часть дня рвал себе волосы, пытаясь решить эту проблему безуспешно. Я прочитал много постов и не смог успешно применить какие-либо решения. Я относительно новичок в NHibernate и стремлюсь больше его использовать, но пока что есть довольно крутая кривая обучения для запуска проекта. Буду признателен за любые советы по разрешению и объяснению ошибки.

1 Ответ

1 голос
/ 02 марта 2012

Используйте KeyReference вместо KeyPropery для многозначных отношений, являющихся частью первичного ключа.

.KeyReference(e => e.Source)
.KeyReference(e => e.Target);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...