0
當我嘗試使用NHibernate保存對象時,出現錯誤「此SqlParameterCollection的索引無效......」。 我已經閱讀了很多有關這些問題的答案,但他們要麼是關於流利的NHB,要麼似乎不適用於我的問題(我可能是錯的)。NHibernate:此SqlParameterCollection的索引無效
這裏是我的HBM和我的課:
<class name="MyWebSite.Model.ADUser" table="AD_USER">
<id name="Id" column="ID">
<generator class="native"/>
</id>
<property name="Login" column="LOGIN"/>
<property name="Hidden" column="HIDDEN"/>
<many-to-one name="Resource" column="LOGIN" property-ref="Login" cascade="none" />
</class>
[DataContract()]
public class ADUser : Entity.AbstractPersistentObject
{
[DataMember(EmitDefaultValue = false)]
public virtual string Login { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual bool Hidden { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual AbstractHumanResource Resource { get; set; }
}
AbstractPersistentObject是不是我定義自己的一類,我發現不HBM文件引用所以我想這不是綁定到任何映射。 它具有「ID」propery的定義(我甚至沒有使用其他的)。
[DataContract()]
public abstract class AbstractPersistentObject
{
[DataMember(EmitDefaultValue = false)]
public virtual int? Id { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual DateTime DateCreated { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual DateTime? DateUpdated { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual DateTime? DateDeleted { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual string CreatedBy { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual string UpdatedBy { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual string DeletedBy { get; set; }
public override int GetHashCode()
{
return !Id.HasValue ? base.GetHashCode() : string.Concat(this.GetType().FullName, Id.Value).GetHashCode();
}
public override bool Equals(object obj)
{
return obj == null ? false : obj.GetHashCode() == this.GetHashCode();
}
public override string ToString()
{
return this.GetType() + "#" + this.Id;
}
}
(我沒有看到這種繼承問題)
當我得到的數據列表,它工作正常。只有當我試圖保存它時纔會拋出異常(我還沒有嘗試刪除)。
不級聯=「無」提供相同的行爲? – Serge
我猜想級聯會阻止Resource對象被保存,但不會禁用它們自身的保存。謝謝。 – Serge
@Serge級聯是一個完全不同的概念。插入和更新屬性只是說NHibernate忽略插入和更新語句的屬性。相反,級聯是指被引用實體應該或不應該改變的時間。所以cascade =「none」只是說如果您的'ADUser'對象被插入/刪除,NHibernate不應該插入/刪除'AbstractHumanResource'對象。 – cremor