存储的综合消失在重新启动调试,但重建IObjectServer和IObjectClient在一个单元的测试是"确定"
题
我储存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()更新。所引用的对象是没有更新。由于清单也是一种目的,这不是更新。因此你有这个可能性:
- 增加的更新deph的配置。无论是全球,对于某些类或级更新标志
- 储存的列表显IObjectContainer.Store()
- 或者使用 透明坚持不懈
如果这不是问题,告诉我,我会除去这个答案。
由的方式。我的创建db4o版本,你正在使用(7.4)具有一种次优Guid-处理。也许你应该考虑较新的版本,7.12.
不隶属于 StackOverflow