我有一个非常简单的单向映射。见下图:插入后NHibernate仍然会更新
public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}
public PhoneNumberMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Number);
Table("ContactNumbers");
}
根据这一post NHibernate的3及以上后,设定键为非null应该修复插件更新的问题(这个问题时,NHibernate的问题与外键设置为空,那么插入更新以更新外键以更正值),但这不适用于我。当我设定键不可为空,NHibernate的问题有正确插入语句
INSERT INTO ContactNumbers
(Number,
ContactId)
VALUES ('(212) 121-212' /* @p0 */,
10 /* @p1 */);
正如你所看到的,它插入的ContactID场,但在那之后,它仍然发出更新语句
UPDATE ContactNumbers
SET ContactId = 10 /* @p0 */
WHERE Id = 34 /* @p1 */
所以要澄清问题。 NHibernate插入Contact行并正确指定了外键,然后它发出更新语句来更新冗余的外键(ContactId)。
我怎样才能摆脱这种多余的更新语句? 谢谢。
顺便说一句,我使用的是最新版本的NHibernate和流利的NHibernate的。该数据库是SQLite的
当所有的希望都消失了,你来了:D。简单,清晰,完美的作品,它甚至用单一的删除替换了更新/删除操作,该死的,你不知道我是多么的感激,这是很多人都不知道的重要问题,谢谢hazzik – Davita 2012-07-20 09:03:07
是的,我们应该更新我们的文档,但它是一个巨大而无聊的工作:( – hazzik 2012-07-20 09:16:55
我明白,感谢上帝,我们有:-) – Davita 2012-07-20 09:24:33