Nano Hash - криптовалюты, майнинг, программирование

Недопустимый индекс 4 для этой коллекции SqlParameterCollection со значением Count=4.

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

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

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

.KeyReference(e => e.Source)
.KeyReference(e => e.Target);
02.03.2012
  • Спасибо, кажется, удалось преодолеть это исключение. Теперь у меня есть новое исключение, возможно, мне следует опубликовать новый вопрос? Ассоциация из таблицы ExchangeRates относится к несопоставленному классу: JFS.Data.Currency. 03.03.2012
  • Что такое GenericEnumMapper<Currency>. Является ли Currency перечислением, которое вы хотите использовать для Source и Target? 03.03.2012
  • Да Currency — это перечисление для источника и цели. GenericEnumMapper позволяет мне сохранять строковое значение перечисления, а не целочисленное представление в базе данных. 03.03.2012
  • Спасибо, прочитав дальше по этой ссылке, я обнаружил, что причина второй ошибки заключается в том, что мое Enum находится в другом пространстве имен, где AutoMapper позволяет отображать объекты. Это приводит меня к новой ошибке: Tried to add property 'Name' when already added В которой нет указаний на то, какое именно сопоставление вызывает проблему. 03.03.2012
  • @ProNotion Я бы задал новый вопрос и опубликовал полное исключение, которое происходит Exception.ToString() 03.03.2012
  • Спасибо за вашу помощь, я отметил ваш ответ как решение и опубликую новую проблему как отдельный вопрос. 03.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..