Словарь NHibernate: не удалось инициализировать коллекцию - PullRequest
1 голос
/ 20 февраля 2012

В моем классе есть словарь

public class AffectedVehicleInScenario : DomainObjectWithId {

    ... some other properties ...

    private readonly int _id;
    private readonly IDictionary<int, int> _installationRates
        = new Dictionary<int, int>();

    ... some code ...

}

и отобразил его следующим образом

<class name="AffectedVehicleInScenario"
     table="tblAffectedVehicleInScenario"
     lazy="false">
<id name="_id"
    column="Id"
    access="field">
  <generator class="native" />
</id>

... some other properties ...

<map name="_installationRates"
     table="tblInstallationRatesOfAffectedVehicleInScenario"
     access="field"
     lazy="false">
  <key column="AffectedVehicleInScenarioId" not-null="true"/>
  <index column="Year" type="Int32"/>
  <element column="InstallationRate"
           not-null="true" 
           type="Int32"/>
</map>

Вставка работает отлично, но при загрузке из базы данных (SQLITE) я получаю исключение:

Spring.Data.NHibernate.HibernateSystemException: could not initialize a collection:
[Com.QueoMedia.CO2Simulationstool.Domain.AffectedVehicleInScenario._installationRates#1][SQL: SELECT installat0_.AffectedVehicleInScenarioId as Affected1_0_, installat0_.InstallationRate as Installa2_0_, installat0_.Year as Year0_ FROM tblInstallationRatesOfAffectedVehicleInScenario installat0_ WHERE installat0_.AffectedVehicleInScenarioId=?]
---> NHibernate.Exceptions.GenericADOException: could not initialize a collection:
[Com.QueoMedia.CO2Simulationstool.Domain.AffectedVehicleInScenario._installationRates#1][SQL: SELECT installat0_.AffectedVehicleInScenarioId as Affected1_0_, installat0_.InstallationRate as Installa2_0_, installat0_.Year as Year0_ FROM tblInstallationRatesOfAffectedVehicleInScenario installat0_ WHERE installat0_.AffectedVehicleInScenarioId=?]
---> System.InvalidCastException: Die angegebene Umwandlung ist ungültig.

Может кто-нибудь помочь мне, пожалуйста? Неверное отображение или это ошибка в nhibernate?

Заранее спасибо

Tobi

Обновление: Созданная таблица выглядит следующим образом:

CREATE TABLE tblInstallationRatesOfAffectedVehicleInScenario
(
    AffectedVehicleInScenarioId INT not null,
    InstallationRate SMALLINT not null,
    Year INT not null,
    primary key (AffectedVehicleInScenarioId, Year),
    constraint FKDF60481555A07D7C foreign key (AffectedVehicleInScenarioId) references tblAffectedVehicleInScenario
)

1 Ответ

2 голосов
/ 20 февраля 2012

Я полагаю, это потому, что драйвер sqlite возвращает короткий объект в штучной упаковке как объект, который не может быть напрямую преобразован в int Вы могли бы использовать IDictionary<int, short> или использовать IUserType для реализации, или там может быть какой-то конфиг, чтобы сообщить NH разницу.

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