【发布时间】:2012-02-14 23:11:25
【问题描述】:
NHibernate 引发异常:“此 SqlParameterCollection 的索引 n 无效,Count=n。”当我尝试保存 Meter 对象时。问题在于 CurrentReading 属性。如果我评论该映射,一切都很好。此外,如果我在数据库 NHibernate 中手动设置 CurrentReading ,则可以正常查询。
我对 NHibernate 比较陌生,任何帮助将不胜感激。
我有以下课程:
public class Meter
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual MeterReading CurrentReading { get; protected set; }
private IList<MeterReading> _readings;
public virtual ReadOnlyCollection<MeterReading> Readings
{
get { return new ReadOnlyCollection<MeterReading>(_readings); }
}
public virtual void AddMeterReading(MeterReading MeterReading)
{
_readings.Add(MeterReading);
if (CurrentReading == null || MeterReading.ReadingTimestamp > CurrentReading.ReadingTimestamp)
{
CurrentReading = MeterReading;
}
}
}
public class MeterReading
{
public virtual Guid Id { get; set; }
public virtual decimal Usage { get; set; }
public virtual DateTime ReadingTimestamp { get; set; }
}
还有这个流畅的 nhibernate 映射文件:
public sealed class MeterMap : ClassMap<Meter>
{
public MeterMap()
{
Id(x => x.Id);
References(m => m.CurrentReading)
.Column("CurrentMeterReadingId")
.LazyLoad()
.Cascade.None()
.Nullable();
HasMany(x => x.Readings)
.KeyColumn("MeterId")
.Access.CamelCaseField(Prefix.Underscore)
.LazyLoad()
.Inverse()
.Cascade.All();
}
}
public sealed class MeterReadingMap : ClassMap<MeterReading>
{
public MeterReadingMap()
{
Id(x => x.Id);
Map(x => x.ReadingTimestamp)
.Not.Nullable();
Map(x => x.Usage)
.Precision(18)
.Scale(8)
.Not.Nullable();
}
}
【问题讨论】:
标签: nhibernate fluent-nhibernate