Stocké dissapears IEnumerable sur le débogage de redémarrage, mais de recréer IObjectServer et IObjectClient dans un test unitaire est ok

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

  •  20-09-2019
  •  | 
  •  

Question

je stocker un objet dans une base de données IUser db4o comme suit (le client est un IObjectClient):

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

La mise en œuvre de IUser qui est utilisé ici a le champ qui est en IUser IEnumerable<Roles> Roles { get;} décrivait mis en œuvre avec un champ de support IList<Roles> = new List<Roles>()

Quand je lance le tout UnitTest suivant fonctionne très bien:

[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));
}

Quand j'utilise les mêmes méthodes (AddUser et GetUser) dans mon site, séparés par un « débogage redémarrage » cependant, le GetUser () retourne correctement le IUser, mais avec le Roles.Count() == 0

Était-ce utile?

La solution

Une question pourrait être la mise à jour-deph . Dans votre essai, vous utilisez une nouvelle .AddRole () créé IUser et utiliser sur elle. Donc, tout fonctionne bien. Cependant, dès que vous appelez .AddRole () sur une mise à jour existante IUser la-deph est pertinente.
Par défaut, seul l'objet passé à IObjectContainer.Store () sont mis à jour. Tout l'objet référencé ne sont pas mis à jour. Étant donné que la liste est aussi un objet, il est pas mis à jour. Par conséquent, vous avez cette possibilité:

Si ce n'est pas la question, dites-moi et je vais supprimer cette réponse.

Par ailleurs. Je la db4o version que vous utilisez (7.4) a une sous-optimale Guid-Handling. Peut-être que vous devriez envisager la nouvelle version, 7.12.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top