代码之家  ›  专栏  ›  技术社区  ›  TcKs

getmodifiedmembers返回空数组

  •  1
  • TcKs  · 技术社区  · 16 年前

    下面的代码总是从 GetModifiedMembers(object) 但是 dx.GetChangeSet().Updates.Contains( foo ) 返回true。

    DataContext dx = new DataContext( string.Empty );
    MockLinqDataObject foo = new MockLinqDataObject();
    dx.GetTable( foo.GetType() ).Attach( foo );
    
    foo.PK = Guid.NewGuid();
    
    // always returns empty array
    ModifiedMemberInfo[] arr_Result = dx.GetTable( foo.GetType() ).GetModifiedMembers( foo );
    bool isOk = ( arr_Result.Length == 1 );
    return isOk;
    

    有人知道哪里不对劲吗?

    提前谢谢你?

    2 回复  |  直到 10 年前
        1
  •  0
  •   Nix    12 年前

    我知道这不是一个答案,但我无法复制你的问题。

    在控制台应用程序中使用以下代码,可以得到长度为1的数组:

    testdbDataContext db = new testdbDataContext();
    Address a = new Address();
    db.GetTable(a.GetType()).Attach(a);
    a.Address1 = "simple change";
    
    var result = db.GetTable(a.GetType()).GetModifiedMembers(a);
    Console.WriteLine(result.Length);
    Console.ReadKey();
    

    控制台输出为 1 .

    尝试修改foo对象上的另一个属性,看看结果是否不同。

        2
  •  0
  •   neo    10 年前

    如果在提交更改后检查长度,则将获得长度0,因为在提交更改后,数据上下文中的更改将被清除。