複合キーを使用してレコードを挿入しようとしています (データベース設計ではなく、企業スキーマを使用する必要があるため、ここでは DB を変更することはできません)。
次のPOCOクラスがあります
public class RulesEngineHeader
{
public virtual string CompanyCode { get; set; }
public virtual string RuleID { get; set; }
public virtual string RuleGroup { get; set; }
public virtual string RuleDescription { get; set; }
public virtual string Expression { get; set; }
}
および次のマッピング (Fluent を使用)
internal class RulesEngineHeaderMap : ClassMap<RulesEngineHeader>
{
internal RulesEngineHeaderMap()
{
Table("LIOEP023");
Id(x => x.CompanyCode, "CONO23")
.GeneratedBy.Assigned()
.Length(2)
.Not.Nullable();
Id(x => x.RuleID, "RLID23")
.GeneratedBy.Assigned()
.Length(30)
.Not.Nullable();
Map(x => x.RuleGroup, "RGRP23")
.Length(30)
.Not.Nullable();
Map(x => x.RuleDescription, "RLDS23")
.Length(50)
.Not.Nullable();
Map(x => x.Expression, "EXPR23")
.Length(2500)
.Not.Nullable();
}
}
次のコードを使用します。
using (iSeriesUOW uow = new iSeriesUOW())
{
GenericRepository<RulesEngineHeader> rep = new GenericRepository<RulesEngineHeader>(uow);
RulesEngineHeader header = new RulesEngineHeader();
header.CompanyCode = "LI";
header.RuleID = "TEST";
header.RuleGroup = "AC";
header.RuleDescription = "Description";
header.Expression = "This is my rule expression";
rep.Add(header);
uow.Commit();
}
rep.Add は単純に
_uow.Session.Save(entityObject);
および uow.Commit(); _session.Flush(); を実行します。
if (_tx != null)
_tx.Commit();
これを実行すると、実行しようとしている次のクエリが表示されます。
INSERT INTO LIOEP023
(RGRP23,
RLDS23,
EXPR23,
RLID23)
VALUES ('AC' /* @p0_0 */,
'Description' /* @p1_0 */,
'This is my rule expression' /* @p2_0 */,
'TEST' /* @p3_0 */)
ご覧のとおり、CompanyCode/CONO23 が見つからないため、エラーが発生しています。
これが私の挿入で使用されていない理由はありますか??