gpt4 book ai didi

nhibernate - Fluent NHibernate 乐观锁

转载 作者:行者123 更新时间:2023-12-04 02:52:16 25 4
gpt4 key购买 nike

我正在尝试使用 fluent nhibernate 配置 op-locking。

那里有很多信息,但似乎没有一个适合我所处的场景。我的类(class)和 map 如下(为简洁起见进行了编辑):

实体:

public class EmailGroup : CRUDDomainObject<EmailGroup>
{
public virtual string Id { get; set; }
public virtual MailServer Server { get; set;}
public virtual string FromAddress { get; set;}
public virtual string ToAddress { get; set;}
public virtual long Version { get; set; }
}

map :

public class EmailGroupMap : ClassMap<EmailGroup>
{
public const string TABLE_ID = "EMAILGROUP";

public const string FIELD_ID = "EMAILID";
public const string FIELD_MAIL_SERVER = "MAILSERVID";
public const string FIELD_FROM_ADDRESS = "EMLFROM";
public const string FIELD_TO_ADDRESS = "EMLTO";
public const string FIELD_VERSION = "VERSION";

public EmailGroupMap()
{
Table(TABLE_ID);

Id(x => x.Id)
.Column(FIELD_ID)
.Not.Nullable()
.GeneratedBy.Assigned()
.Length(12);

References(x => x.Server)
.Column(FIELD_MAIL_SERVER)
.NotFound.Ignore();

Map(x => x.FromAddress)
.Column(FIELD_FROM_ADDRESS)
.Not.Nullable()
.Length(120);

Map(x => x.ToAddress)
.Column(FIELD_TO_ADDRESS)
.Not.Nullable()
.Length(1000);

Version(X => X.Version)
.Column(FIELD_VERSION)
.Generated.Always()
.UnsavedValue("0")
.Access.Property();

DynamicUpdate();

OptimisticLock.Version();
}
}

在我看来一切都很好,但是当我加载实体并修改它时,版本号没有增加。同样,如果我手动增加版本,而 session 处于打开状态,我不会收到 StaleObjectException。

这个配置在更有经验的人看来是否有效?如果是这样,我还能缺少什么?

更新:

在实现数据库管理的时间戳后,版本列(当然)会增加。然而,NHibernate 并不将该行视为乐观锁定。我从 SQL 服务器捕获了更新查询以检查 where 子句(为简洁起见被截断):

exec sp_executesql N'UPDATE [EMAILGROUP] 
SET [EMLDESC] = @EMLDESC, [MAILSERVID] = @MAILSERVID, [EMLFROM] = @EMLFROM, [EMLTO] = @EMLTO, [EMLCC] = @EMLCC, [EMLBCC] = @EMLBCC
WHERE [EMAILID] = @EMAILID'

最佳答案

为什么要指定 Generated.Always()?这告诉 NHibernate 这不是一个真正的列,而是由数据库计算出来的。文档:http://nhibernate.info/doc/nh/en/index.html#mapping-generated

删除它,它应该可以工作。

关于nhibernate - Fluent NHibernate 乐观锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17431459/

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