gpt4 book ai didi

插入后 NHibernate 仍会发出更新

转载 作者:行者123 更新时间:2023-12-04 02:36:59 26 4
gpt4 key购买 nike

我有一个非常简单的单向映射。见下文:

    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 及更高版本之后,将键设置为不可为空应该可以解决插入更新问题(当 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 和 Fluent NHibernate。数据库是 SQLite

最佳答案

您必须设置 "updatable"=false到您的 key 以防止更新。

public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Not.KeyUpdate() // HERE IT IS
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}

关于插入后 NHibernate 仍会发出更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11468668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com