Stored scompare IEnumerable sul riavvio di debug, ma ricreando IObjectServer e IObjectClient in uno unit test è ok

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

  •  20-09-2019
  •  | 
  •  

Domanda

Sono la memorizzazione di un oggetto IUSER in un database db4o come segue (cliente è un IObjectClient):

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

L'attuazione di IUSER che viene qui utilizzato ha il campo che si descriverli in IUSER IEnumerable<Roles> Roles { get;} realizzato con un campo IList<Roles> = new List<Roles>() supporto

Quando eseguo il seguente unittest tutto funziona bene:

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

Quando uso gli stessi metodi (adduser e getUser) nel mio sito web, separati da un "debug riavvio", tuttavia, il GetUser () restituisce l'IUSER correttamente, ma con la Roles.Count() == 0

È stato utile?

Soluzione

Un problema potrebbe essere l'aggiornamento-deph . Nel test, si utilizza un nuovo IUSER creato e usa .AddRole () su di esso. Quindi, tutto funziona bene. Tuttavia, non appena si chiama .AddRole () su un esistente IUSER l'update-deph è rilevante.
Per impostazione predefinita, solo l'oggetto passato a IObjectContainer.Store () vengono aggiornati. Tutto l'oggetto fa riferimento non vengono aggiornati. Dal momento che una lista è anche un oggetto, non viene aggiornato. Pertanto è necessario questo possibilità:

Se questo non è il problema, mi dica e io tolgo questa risposta.

Tra l'altro. Ho la db4o versione stai usando (7.4) ha un non ottimale Guid-Handling. Forse si dovrebbe prendere in considerazione la versione più recente, 7.12.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top