我如何确定一个值是由 NHibernate C# 还是应用程序代码设置的?
How can I to determine if a value is set by NHibernate C# or by application Code?
我有一个对象 属性 的自定义 setter,我想向其添加一些自定义日志记录,这样我就可以查看日志并查看该值何时更改。但是,似乎每当 NHibernate 从数据库中读取该值并填充对象时,就会触发日志记录。有没有办法以编程方式确定更改正在发生,因为 NHibernate 正在填充对象?
public virtual string URL
{
get
{
return pURL;
}
set
{
if (!value.ToLower().Contains("https://"))
{
specialLog.Warn($"Set a URL to {value} with no HTTPS. Callstack: {Environment.StackTrace}"); //This is triggered on NHibernate read always
}
pURL = value;
}
}
您需要更改映射以让 NHibernate 知道您要对此 属性 使用 "field" 访问策略。这样 NHibernate 将绕过设置器并直接设置字段,避免任何自定义逻辑。
如果您正在使用 hbm.xml
映射,您可以按如下方式更改属性的映射:
<property name="pURL" column="URL" access="field">
对于代码映射:
c.Property("pURL", m =>
{
m.Column("URL");
m.Access(Accessor.Field);
});
我有一个对象 属性 的自定义 setter,我想向其添加一些自定义日志记录,这样我就可以查看日志并查看该值何时更改。但是,似乎每当 NHibernate 从数据库中读取该值并填充对象时,就会触发日志记录。有没有办法以编程方式确定更改正在发生,因为 NHibernate 正在填充对象?
public virtual string URL
{
get
{
return pURL;
}
set
{
if (!value.ToLower().Contains("https://"))
{
specialLog.Warn($"Set a URL to {value} with no HTTPS. Callstack: {Environment.StackTrace}"); //This is triggered on NHibernate read always
}
pURL = value;
}
}
您需要更改映射以让 NHibernate 知道您要对此 属性 使用 "field" 访问策略。这样 NHibernate 将绕过设置器并直接设置字段,避免任何自定义逻辑。
如果您正在使用 hbm.xml
映射,您可以按如下方式更改属性的映射:
<property name="pURL" column="URL" access="field">
对于代码映射:
c.Property("pURL", m =>
{
m.Column("URL");
m.Access(Accessor.Field);
});