存储的综合消失在重新启动调试,但重建IObjectServer和IObjectClient在一个单元的测试是"确定"

StackOverflow https://stackoverflow.com/questions/2063775

  •  20-09-2019
  •  | 
  •  

我储存IUser对象在一个数据库创建db4o如下(客户是一个IObjectClient):

public Guid AddUser(IUser user)
{
    lock (userLock)
    {
        user.Id = Guid.NewGuid();
        client.Store(user);
        client.Commit();
    }
    return user.Id;
}

执行IUser,这里使用的场所描述的在IUser IEnumerable<Roles> Roles { get;} 实现用一个背场 IList<Roles> = new List<Roles>()

当我运行以下单元测试的一切工作的罚款:

[TestMethod]
public void UserStaysInRoleAfterServerRestart()
{
    string filePath = IOHelper.MakeAbsolute(ConfigurationManager.AppSettings["userRepository.path.db4o"] + "1");
    IUser expected = GenerateTestUser();
    expected.AddRole(Roles.Anonymous);
    IObjectServer userServer1 = Db4oFactory.OpenServer(filePath, 0);
    IUserRepository repo = new UserRepository(userServer1);
    repo.AddUser(expected);
    userServer1.Close();

    IObjectServer userServer2 = Db4oFactory.OpenServer(filePath, 0);
    IUserRepository repo2 = new UserRepository(userServer2);
    IUser actual = repo2.GetUser(expected.Id);
    Assert.IsTrue(actual.IsInRole(Roles.Anonymous));
}

当我用同样的方法(AddUser和GetUser)在我的网站,由分"重新启动调试"然而,GetUser()返回IUser正确,但是有的 Roles.Count() == 0

有帮助吗?

解决方案

一个问题可能是 更新deph.在你的测试,可使用新创建的IUser和使用。AddRole()。所以一切工作正常。然而,只要你的电话。AddRole()上现有的IUser更新deph是相关的。
通过默认只有对象传递给IObjectContainer.Store()更新。所引用的对象是没有更新。由于清单也是一种目的,这不是更新。因此你有这个可能性:

如果这不是问题,告诉我,我会除去这个答案。

由的方式。我的创建db4o版本,你正在使用(7.4)具有一种次优Guid-处理。也许你应该考虑较新的版本,7.12.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top