Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate 3.2对象不是';当使用惰性属性时,在刷新期间更新t_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# NHibernate 3.2对象不是';当使用惰性属性时,在刷新期间更新t

C# NHibernate 3.2对象不是';当使用惰性属性时,在刷新期间更新t,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我在实体中使用lazyload属性。它工作正常,但当通过方法更改此类中的任何属性时,NHibernate不会进行更新。如果直接更改属性,则一切正常 我假设在惰性属性代理对象的情况下会返回问题,并且该代理不处理内部更改 我在下面添加了测试代码。它在NHibernate 3.1中运行良好,但在NHibernate 3.2和3.3中未调用更新 也许有人知道如何解决这个问题 谢谢 实体: /// <summary> /// Class for testing lazy properties.

我在实体中使用lazyload属性。它工作正常,但当通过方法更改此类中的任何属性时,NHibernate不会进行更新。如果直接更改属性,则一切正常

我假设在惰性属性代理对象的情况下会返回问题,并且该代理不处理内部更改

我在下面添加了测试代码。它在NHibernate 3.1中运行良好,但在NHibernate 3.2和3.3中未调用更新

也许有人知道如何解决这个问题

谢谢

实体:

/// <summary>
/// Class for testing lazy properties.
/// </summary>
public class TestClass
{
    public virtual int Id { get; set; }
    public virtual string LazyData { get; set; }
    public virtual string TestData { get; set; }

    public virtual void ChangeTestData(string data)
    {
        TestData = data;
    }
}
未设置LazyLoad时生成的sql请求:

NHibernate: INSERT INTO "TestClass" (LazyData, TestData) VALUES (@p0, @p1); select last_insert_rowid();@p0 = NULL [Type: String (0)], @p1 = NULL [Type: String (0)]
NHibernate: SELECT this_.Id as Id0_0_, this_.LazyData as LazyData0_0_, this_.TestData as TestData0_0_ FROM "TestClass" this_
NHibernate: UPDATE "TestClass" SET LazyData = @p0, TestData = @p1 WHERE Id = @p2;@p0 = NULL [Type: String (0)], @p1 = 'test' [Type: String (0)], @p2 = 1 [Type: Int32 (0)]

这在我看来绝对是一个bug,你有一个很好的测试用例来证明它


请在

输入一个问题,如果您在persistedObj.ChangeTestData(“test”)之后插入一个虚拟属性访问,它会改变什么吗;(var dummyTest=persistedObj.LazyData;)?这是一个bug,与其他一些已知bug有关:它已修复,但尚未发布。我自己的“vNext”更新错误传递测试用例。对于当前版本的NHibernate有解决方法吗?我有一个byte[]属性,我正在延迟加载;它太贵了,不能懒散地加载它。由于这里提到的错误,它没有更新。我用的是3.3.3.GA
[Test]
public void LazyProperityTest1()
{
    var testObj = new TestClass();
    Session.Save(testObj);
    Session.Flush();
    Session.Clear();

    // Change property and flush session.
    var persistedObj = Session.CreateCriteria<TestClass>().List<TestClass>().First();
    persistedObj.ChangeTestData("test");

    Session.Flush();
    Session.Clear();
}
NHibernate: INSERT INTO "TestClass" (LazyData, TestData) VALUES (@p0, @p1); select last_insert_rowid();@p0 = NULL [Type: String (0)], @p1 = NULL [Type: String (0)]
NHibernate: SELECT this_.Id as Id0_0_, this_.TestData as TestData0_0_ FROM "TestClass" this_
NHibernate: INSERT INTO "TestClass" (LazyData, TestData) VALUES (@p0, @p1); select last_insert_rowid();@p0 = NULL [Type: String (0)], @p1 = NULL [Type: String (0)]
NHibernate: SELECT this_.Id as Id0_0_, this_.LazyData as LazyData0_0_, this_.TestData as TestData0_0_ FROM "TestClass" this_
NHibernate: UPDATE "TestClass" SET LazyData = @p0, TestData = @p1 WHERE Id = @p2;@p0 = NULL [Type: String (0)], @p1 = 'test' [Type: String (0)], @p2 = 1 [Type: Int32 (0)]