可以在nhibernate中的字段上设置临时忽略(因此它不会在提交时更新该字段)

可以在nhibernate中的字段上设置临时忽略(因此它不会在提交时更新该字段),nhibernate,Nhibernate,我想知道什么时候我可以取回我的对象(比如说文件)并对其进行这些修改 File.Name = "test"; File.Id = 1; File.Date = "6/3/2011 12:00:00 am"; File.IsLocked = false 所以我得到了这个文件对象,但日期不是本地时间。所以当我把它拿回来的时候,我马上把它转换成当地时间 我马上就这么做了(采用相同的回购方法),因为此时应始终如此。该日期应为当地时间。我可以在不同的点转换它,这将解决我的问题,但是程序员必须记住,一旦他们

我想知道什么时候我可以取回我的对象(比如说文件)并对其进行这些修改

File.Name = "test";
File.Id = 1;
File.Date = "6/3/2011 12:00:00 am";
File.IsLocked = false
所以我得到了这个文件对象,但日期不是本地时间。所以当我把它拿回来的时候,我马上把它转换成当地时间

我马上就这么做了(采用相同的回购方法),因为此时应始终如此。该日期应为当地时间。我可以在不同的点转换它,这将解决我的问题,但是程序员必须记住,一旦他们返回一个文件对象,他们就必须手动调用convertToLocalTime()方法

从过去的经验来看,这一结果很糟糕,很多次都忘记了转换为当地时间。所以我真的想把它留在那里

所以我的问题是

一旦返回,文件现在看起来像这样

File.Name = "test";
    File.Id = 1;
    File.Date = "6/3/2011 5:00:00pm";
    File.IsLocked = false
现在,我必须获取此对象并将File.IsLocked更改为True

File.Name = "test";
    File.Id = 1;
    File.Date = "6/3/2011 5:00:00pm";
    File.IsLocked = true
现在的问题是我需要保存这个,但我不想保存本地时间。对于这一次提交,我想忽略它(可能还有其他时间需要保存日期,但在本例中不需要)


我可以告诉nhibernate不要保存转换后的日期吗?

如果使用侦听器类,您可以调用convertToLocalTime(),而不必让程序员这样做

public class TestInterceptor
  : EmptyInterceptor, IInterceptor
{
    private readonly IInterceptor innerInterceptor;

    public TestInterceptor(IInterceptor innerInterceptor)
    {
        this.innerInterceptor = this.innerInterceptor ?? new EmptyInterceptor();
    }


 public override bool OnSave(object entity, 
                                object id, 
    object[] state, 
    string[] propertyNames, 
    IType[] types)
    {
        if ( entity is yourType) {
            //call convertToLocalTime()
        }
        return this.innerInterceptor.OnSave(entityName, id,state,propertyNames,types);
    }


}

已更新

拦截器是允许您重写基本nhibernate方法的类,如OnSave、OnLoad。。。每一个实体都需要它

看这里:

您可以流畅地配置它:

return Fluently.Configure()
           ...
            .ExposeConfiguration(c =>{c.Interceptor = new TestInterceptor(c.Interceptor ?? new EmptyInterceptor());})
            ...
            .BuildConfiguration();

我不太清楚你在这里的意思。什么是拦截器类,它是如何工作的?