2

NHibernate データベース モデルの複合 ID を定義しました。外部キー関係で定義された列の 1 つも使用しました。NHibernate を使用してオブジェクトを挿入すると、次の例外が発生します。

System.IndexOutOfRangeException: Count=7 のこの SqlParameterCollection の無効なインデックス 7。
System.Data.SqlClient.SqlParameterCollection.RangeCheck(Int32 インデックス)
で System.Data.SqlClient.SqlParameterCollection.GetParameter(Int32 インデックス)
で NHibernate.Type.Int32Type.Set(IDbCommand rs、オブジェクト値、Int32 インデックス)
で NHibernate.Type .NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index)
at NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, ISessionImplementor session)
at NHibernate.Type.ComponentType.NullSafeSet(IDbCommand st, Object value, Int32 開始、ISessionImplementor セッション)
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate (オブジェクト id、Object [] フィールド、オブジェクト rowId、Boolean [] includeProperty、Boolean [] [] includeColumns、Int32 テーブル、IDbCommand ステートメント、ISessionImplementor セッション、Int32 インデックス)
で NHibernate.Persister .Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields) 、オブジェクト obj、ISessionImplementor セッション)
NHibernate.Impl.StatelessSessionImpl.Insert(文字列エンティティ名、オブジェクト エンティティ)
で NHibernate.Impl.StatelessSessionImpl.Insert(オブジェクト エンティティ)

1 つの列を 2 つの異なる目的 (外部キー関係と主キー) に使用することはできますか?

C# NHibernate モデル

public const string STR_ID = "Id";
public const string STR_SHARDKEY = "ShardKey";
public const string STR_OTHERMODEL = "OtherModel";

[CompositeId(-4)]
[KeyProperty(-3, Name = STR_ID, Column = STR_ID)]
[KeyProperty(-2, Name = STR_SHARDKEY , Column = STR_SHARDKEY )]
[Generator(-1, Class = "guid.comb")]
public virtual Guid? Id { get; set; }

[Column(Name = STR_SHARDKEY )]
public virtual int ShardKey{ get; set; }

[ManyToOne(0)]
[Column(1, Name = STR_OTHERMODEL )]
[Column(2, Name = STR_SHARDKEY )]
public virtual OtherModel OtherModel { get; set; }

XML マッピング

<composite-id>
    <key-property name="Id" column="Id" />
    <key-property name="ShardKey" column="ShardKey" />
</composite-id>

<many-to-one name="OtherModel" >
    <column name="OtherModel" />
    <column name="ShardKey" />
</many-to-one>
4

0 に答える 0