Я надеюсь, что кто-то может помочь мне с этим вопросом. Я стучал
мой мозг и мой проект должны быть очень скоро. Заранее спасибо.
Я получаю исключение индекса вне диапазона при вставке нового
запись. После бесконечного поиска информации, было предложено
что количество значений столбца в моем отображении не совпадает с тем, что в моем
постоянный класс. Тем не менее, я посчитал и пересчитал, и они, кажется,
матч. Как вы можете видеть по моему коду ниже, я использую
NHibernate.Mapping.Attributes, чтобы сделать мое сопоставление. Может я делаю
что-то там не так.
Я наконец-то скачал исходник NHibernate и отлаживал через мой
проблема. Ниже приведен оператор вставки, который пытается выполнить NHibernate.
построить:
{INSERT INTO WTSLIB33T.PRODDATA (PSTAT, PCONO, PDVNO, PWKTY, PCRTY,
PTSID, PCNNO, PDTTK, PJBNO, PSJNO, PTKNO, PCWNO, PWKAR, PWKDC, PWKCD,
ЦЕННОСТИ PCNWO, PWDNO, PDESC, PDCCD, PHRS, PUNIT, PSEQ, PCUST)
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
Как видите, количество параметров соответствует количеству полей
в списке. Я также сопоставил эту сгенерированную вставку с моим классом
и я обнаружил, что столбцы PSEQ и PCUST вышли из строя
с моим постоянным классом. Затем во время отладки через дегидрат
Функция я обнаружил две возможные проблемы. Во-первых, я заметил, что
вызов функции NullSafeSet устанавливает параметр 0 в то, что мой PSEQ
поле должно быть установлено, но параметр 0 в операторе вставки
PSTAT.
Вторая проблема, которую я заметил, заключается в том, что самый последний вызов "index + =
ArrayHelper.CountTrue (includeColumns [i]); "в функции обезвоживания
оставляет индексную переменную равной 23, что правильно; однако следующий
call "IdentifierType.NullSafeSet (оператор, идентификатор, индекс,
session); ", где он проверяет идентификатор строки, передает в индекс 23, который
будет вне диапазона. Это значение должно быть 22 для нуля на основе
массив.
protected int Dehydrate(object id, object[] fields, object rowId, bool[] includeProperty, bool[][] includeColumns, int table, IDbCommand statement, ISessionImplementor session, int index)
{
if (log.IsDebugEnabled)
{
log.Debug("Dehydrating entity: " + MessageHelper.InfoString(this, id, Factory));
}
// there's a pretty strong coupling between the order of the SQL parameter
// construction and the actual order of the parameter collection.
for (int i = 0; i < entityMetamodel.PropertySpan; i++)
{
if (includeProperty[i] && IsPropertyOfTable(i, table))
{
PropertyTypes[i].NullSafeSet(statement, fields[i], index, includeColumns[i], session);
index += ArrayHelper.CountTrue(includeColumns[i]);
}
if (rowId != null)
{
// TODO H3.2 : support to set the rowId
// TransactionManager.manager.SetObject(ps, index, rowId);
// index += 1;
throw new NotImplementedException("support to set the rowId");
}
else if (id != null)
{
IdentifierType.NullSafeSet(statement, id, index, session);
index += IdentifierColumnSpan;
}
return index;
}
МОЙ ПЕРСИСТЕНТНЫЙ КЛАСС:
[NHibernate.Mapping.Attributes.Class (0, схема = WTSLIB33T, таблица =
"PRODDATA", NameType = typeof (ProddataDAO),
Ленивый = правда)]
открытый класс ProddataDAO: Object //: INotifyPropertyChanged
{
public ProddataDAO ()
{
}
public ProddataDAO(string PSTAT, decimal PCONO, decimal PDVNO, decimal PSEQ, string PWKTY, string PCRTY,
decimal PTSID, decimal PCUST, decimal PCNNO, decimal PDTTK, string PJBNO, string PSJNO, decimal PTKNO,
string PCWNO, string PWKAR, string PWKDC, string PWKCD, string PCNWO, decimal PWDNO, string PDESC,
decimal PDCCD, decimal PHRS, decimal PUNIT)
{
_PSTAT = PSTAT;
_PCONO = PCONO;
_PDVNO = PDVNO;
_PSEQ = PSEQ;
_PWKTY = PWKTY;
_PCRTY = PCRTY;
_PTSID = PTSID;
_PCUST = PCUST;
_PCNNO = PCNNO;
_PDTTK = PDTTK;
_PJBNO = PJBNO;
_PSJNO = PSJNO;
_PTKNO = PTKNO;
_PCWNO = PCWNO;
_PWKAR = PWKAR;
_PWKDC = PWKDC;
_PWKCD = PWKCD;
_PCNWO = PCNWO;
_PWDNO = PWDNO;
_PDESC = PDESC;
_PDCCD = PDCCD;
_PHRS = PHRS;
_PUNIT = PUNIT;
}
//public event PropertyChangedEventHandler PropertyChanged;
private decimal _PSEQ;
//[NHibernate.Mapping.Attributes.Id(0, Name="PSEQ", Column="PSEQ", Type="Decimal")]
[NHibernate.Mapping.Attributes.CompositeId(1, UnsavedValue=NHibernate.Mapping.Attributes.UnsavedValueType.Undefined)]
[NHibernate.Mapping.Attributes.KeyProperty(2, Name = "PSEQ", Column = "PSEQ", Type="Decimal")]
[NHibernate.Mapping.Attributes.KeyProperty(2, Name = "PCUST", Column = "PCUST")]
//[NHibernate.Mapping.Attributes.Generator(3, Class="none")]
[NHibernate.Mapping.Attributes.Property(4, Name="PSEQ", Column="PSEQ")]
public virtual decimal PSEQ
{
get
{
return _PSEQ;
}
set
{
if (value != this._PSEQ)
{
_PSEQ = value;
//OnPropertyChanged("PSEQ");
}
}
}
private decimal _PCUST;
//[NHibernate.Mapping.Attributes.Id(0, Column = "PCUST", Type = "Decimal")]
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PCUST
{
get
{
return _PCUST;
}
set
{
if (value != this._PCUST)
{
_PCUST = value;
//OnPropertyChanged("PCUST");
}
}
}
private string _PSTAT;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PSTAT
{
get
{
return _PSTAT;
}
set
{
if (value != this._PSTAT)
{
this._PSTAT = value;
//OnPropertyChanged("PSTAT");
}
}
}
private decimal _PCONO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PCONO
{
get
{
return _PCONO;
}
set
{
if (value != this._PCONO)
{
_PCONO = value;
//OnPropertyChanged("PCONO");
}
}
}
private decimal _PDVNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PDVNO
{
get
{
return _PDVNO;
}
set
{
if (value != this._PDVNO)
{
_PDVNO = value;
//OnPropertyChanged("PDVNO");
}
}
}
private string _PWKTY;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PWKTY
{
get
{
return _PWKTY;
}
set
{
if (value != this._PWKTY)
{
_PWKTY = value;
//OnPropertyChanged("PWKTY");
}
}
}
private string _PCRTY;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PCRTY
{
get
{
return _PCRTY;
}
set
{
if (value != this._PCRTY)
{
_PCRTY = value;
//OnPropertyChanged("PCRTY");
}
}
}
private decimal _PTSID;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PTSID
{
get
{
return _PTSID;
}
set
{
if (value != this._PTSID)
{
_PTSID = value;
//OnPropertyChanged("PTSID");
}
}
}
private decimal _PCNNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PCNNO
{
get
{
return _PCNNO;
}
set
{
if (value != this._PCNNO)
{
_PCNNO = value;
//OnPropertyChanged("PCNNO");
}
}
}
private decimal _PDTTK;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PDTTK
{
get
{
return _PDTTK;
}
set
{
if (value != this._PDTTK)
{
_PDTTK = value;
//OnPropertyChanged("PDTTK");
}
}
}
private string _PJBNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PJBNO
{
get
{
return _PJBNO;
}
set
{
if (value != this._PJBNO)
{
_PJBNO = value;
//OnPropertyChanged("PJBNO");
}
}
}
private string _PSJNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PSJNO
{
get
{
return _PSJNO;
}
set
{
if (value != this._PSJNO)
{
_PSJNO = value;
//OnPropertyChanged("PSJNO");
}
}
}
private decimal _PTKNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PTKNO
{
get
{
return _PTKNO;
}
set
{
if (value != this._PTKNO)
{
_PTKNO = value;
//OnPropertyChanged("PTKNO");
}
}
}
private string _PCWNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PCWNO
{
get
{
return _PCWNO;
}
set
{
if (value != this._PCWNO)
{
_PCWNO = value;
//OnPropertyChanged("PCWNO");
}
}
}
private string _PWKAR;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PWKAR
{
get
{
return _PWKAR;
}
set
{
if (value != this._PWKAR)
{
_PWKAR = value;
//OnPropertyChanged("PWKAR");
}
}
}
private string _PWKDC;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PWKDC
{
get
{
return _PWKDC;
}
set
{
if (value != this._PWKDC)
{
_PWKDC = value;
//OnPropertyChanged("PWKDC");
}
}
}
private string _PWKCD;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PWKCD
{
get
{
return _PWKCD;
}
set
{
if (value != this._PWKCD)
{
_PWKCD = value;
//OnPropertyChanged("PWKCD");
}
}
}
private string _PCNWO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PCNWO
{
get
{
return _PCNWO;
}
set
{
if (value != this._PCNWO)
{
_PCNWO = value;
//OnPropertyChanged("PCNWO");
}
}
}
private decimal _PWDNO;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PWDNO
{
get
{
return _PWDNO;
}
set
{
if (value != this._PWDNO)
{
_PWDNO = value;
//OnPropertyChanged("PWDNO");
}
}
}
private string _PDESC;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual string PDESC
{
get
{
return _PDESC;
}
set
{
if (value != this._PDESC)
{
_PDESC = value;
//OnPropertyChanged("PDESC");
}
}
}
private decimal _PDCCD;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PDCCD
{
get
{
return _PDCCD;
}
set
{
if (value != this._PDCCD)
{
_PDCCD = value;
//OnPropertyChanged("PDCCD");
}
}
}
private decimal _PHRS;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PHRS
{
get
{
return _PHRS;
}
set
{
if (value != this._PHRS)
{
_PHRS = value;
//OnPropertyChanged("PHRS");
}
}
}
private decimal _PUNIT;
[NHibernate.Mapping.Attributes.Property(4)]
public virtual decimal PUNIT
{
get
{
return _PUNIT;
}
set
{
if (value != this._PUNIT)
{
_PUNIT = value;
//OnPropertyChanged("PUNIT");
}
}
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
ProddataDAO p = obj as ProddataDAO;
if (this.PCONO == p.PCONO && this.PDVNO == p.PDVNO && this.PCUST == p.PCUST && this.PSEQ == p.PSEQ)
return true;
else
return false;
}
public override int GetHashCode()
{
int hash = 1122;
hash += (null == this.PCONO ? 0 : this.PCONO.GetHashCode());
hash += (null == this.PDVNO ? 0 : this.PDVNO.GetHashCode());
hash += (null == this.PCUST ? 0 : this.PCUST.GetHashCode());
hash += (null == this.PSEQ ? 0 : this.PSEQ.GetHashCode());
return hash;
}