次のように IUser オブジェクトを Db4o データベースに格納しています (クライアントは IObjectClient です)。
public Guid AddUser(IUser user)
{
lock (userLock)
{
user.Id = Guid.NewGuid();
client.Store(user);
client.Commit();
}
return user.Id;
}
ここで使用される IUser のIEnumerable<Roles> Roles { get;}
実装には、バッキング フィールドで実装された IUser に記述されているフィールドがあります。IList<Roles> = new List<Roles>()
次の UnitTest を実行すると、すべて正常に動作します。
[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));
}
Web サイトで同じメソッド (AddUser と GetUser) を使用し、「デバッグの再開」で区切って使用すると、GetUser() は IUser を正しく返しますが、Roles.Count() == 0