ずっと前にFluentNHグループに投稿しましたが、今日まで回答がありませんでした。だから、ここに問題があります:私は1対多の関係を定義していて、片側には逆フラグが設定されています。マッピングコードは次のようになります。
public class MapeamentoReceita : ClassMap<Receita> {
public MapeamentoReceita() {
Table("Receitas");
Not.LazyLoad();
Id(rec => rec.Id, "IdReceita")
.GeneratedBy
.HiLo("TabelaHilo", "ProximoHi", "1000", "Tabela='receitas'")
.Default(0);
Version(rec => rec.Versao);
//other props go here
HasMany(rec => rec.Imagens)
.Access.CamelCaseField((Prefix.Underscore))
.AsBag()
.Cascade.All()
.KeyColumn("IdReceita")
.Not.LazyLoad()
.Inverse();
}
}
これで、Imagemのマッピングは次のようになります。
public class MapeamentoImagem : ClassMap<Imagem> {
public MapeamentoImagem() {
Table("Imagens");
Not.LazyLoad();
Id(img => img.Id, "IdImagem")
.GeneratedBy
.HiLo("TabelaHiLo", "ProximoHi", "1000", "Tabela='imagens'")
.Default(0);
Map(img => img.Bytes)
.CustomSqlType("image")
.CustomType<Byte[]>()
.LazyLoad()
.Length(2000000000)
.Not.Nullable()
.Not.Update();
References(img => img.Receita)
.Column("IdReceita")
.Cascade.None();
}
}
そして、これらのクラスの永続性をテストするコードは次のとおりです。
new PersistenceSpecification<Receita>(sess)
.CheckList(rec => rec.Imagens,
_imagens,
(receita, imagem) => receita.AdicionaImagem(imagem))
.VerifyTheMappings();
Inverseが「オン」であっても、PersistenceSpecificationはReceitaを挿入する前にImagemを挿入しようとします。IdReceitaはnullを受け入れないように構成された外部キーであるため、例外が発生します。receitaを使用する「実世界のコード」を書いてみましたが、動作します(SQLをオンにしたところ、この場合、ReceitaがImagemの前に挿入されていることがわかります)。
FHグループでは誰もこの質問に答えていないので、このPersistenceSpecificationの動作がバグであることを誰かが確認できるかどうか疑問に思いました。
ありがとう。