次のようにマップされたクラスがあります。
public class FooMap : ClassMap<Foo>
{
public FooMap()
{
Table("Foo");
LazyLoad();
CompositeId().KeyProperty(x => x.ID,
kp => kp.ColumnName("Id")
.Type(typeof(long)))
.KeyProperty(x => x.ValidFrom);
}
}
MSSQL 側では、Id は ID 列で、テーブルの PK は と で構成されId
ますValidFrom
。
保存に使用するコードは次のとおりです。
ISession session = SessionService.GetSession();
new SqlCommand("SET IDENTITY_INSERT Foo ON",
session.Connection as SqlConnection)
.ExecuteNonQuery();
try
{
// performs various versioning checks,
// then saves using transaction.
// The session is the same as above
GenericDataService.Save(myFoo);
}
finally
{
new SqlCommand("SET IDENTITY_INSERT Foo OFF",
session.Connection as SqlConnection)
.ExecuteNonQuery();
}
に設定Identity_Insert
しましたON
が、次の例外が発生します( ID
new を保持して設定する場合ValidFrom
):
Cannot insert explicit value for identity column in table 'Foo' when IDENTITY_INSERT is set to OFF.
これは実行された SQL です:
INSERT INTO Foo (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, Id, ValidFrom)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
なぜまだその例外が発生するのか、誰か説明できますか?