Я уже опубликовал это в группе Fluent NH давным-давно, но до сегодняшнего дня не получил никаких ответов.Итак, вот проблема: у меня определено отношение «один ко многим», а на одной стороне установлен обратный флаг.код отображения выглядит примерно так:
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 пытается вставить Imagem перед вставкой Receita.Так как IdReceita - это внешний ключ, настроенный не принимать ноль, я получаю исключение.Я попытался написать «код реального мира», который использует Receita, и он работает (я включил SQL, и я вижу, что в этом случае Receita вставляется перед Imagem, как и должно быть).
Так какникто не ответил на этот вопрос о группе FH, мне было интересно, если кто-нибудь может подтвердить, что это поведение PersistenceSpecification является ошибкой.
спасибо.