Je lance deux instances de mon application. Dans une instance, je sauvegarde une de mes entités. Lorsque je vérifie le RavenDB (http://localhost:8080/raven), je peux voir le changement. Ensuite, dans mon autre client, je fais ceci (ci-dessous), mais je ne vois pas les changements de l'autre application. Que dois-je faire pour obtenir les données les plus récentes dans la base de données ?
public IEnumerable<CustomVariableGroup> GetAll()
{
return Session
.Query<CustomVariableGroup>()
.Customize(x => x.WaitForNonStaleResults());
}
Edit : Le code ci-dessus fonctionne si j'essaie d'effectuer une modification et que j'obtiens une exception de concurrence. Après cela, lorsque j'appelle le rafraîchissement (qui invoque le code ci-dessus), cela fonctionne.
Voici le code qui effectue la sauvegarde :
public void Save<T>(T objectToSave)
{
Guid eTag = (Guid)Session.Advanced.GetEtagFor(objectToSave);
Session.Store(objectToSave, eTag);
Session.SaveChanges();
}
Et voici la classe qui contient la base de données et la session :
public abstract class DataAccessLayerBase
{
/// <summary>
/// Gets the database.
/// </summary>
protected static DocumentStore Database { get; private set; }
/// <summary>
/// Gets the session.
/// </summary>
protected static IDocumentSession Session { get; private set; }
static DataAccessLayerBase()
{
if (Database != null) { return; }
Database = GetDatabase();
Session = GetSession();
}
private static DocumentStore GetDatabase()
{
string databaseUrl = ConfigurationManager.AppSettings["databaseUrl"];
DocumentStore documentStore = new DocumentStore();
try
{
//documentStore.ConnectionStringName = "RavenDb"; // See app.config for why this is commented.
documentStore.Url = databaseUrl;
documentStore.Initialize();
}
catch
{
documentStore.Dispose();
throw;
}
return documentStore;
}
private static IDocumentSession GetSession()
{
IDocumentSession session = Database.OpenSession();
session.Advanced.UseOptimisticConcurrency = true;
return session;
}
}