10
votes

Entity Framework - Actualiser les objets de la base de données

J'ai des problèmes avec des objets rafraîchissants dans ma base de données. J'ai un pc et deux applications de PC.

sur le premier PC, une application qui communique avec ma base de données et ajoute des données à la table des mesures. Sur mon autre PC, une application rétrécit la dernière mesure sous une minuterie, de sorte qu'il devrait revenir des mesures ajoutées par l'application sur mon premier PC.

Le problème est-il pas. Sur mon application, il met en cache toutes les données de la base de données et n'obtiendrez jamais de nouvelles données ajoutées. J'utilise une méthode de rafraîchissement () qui fonctionne bien lorsque je modifie l'une des données en cache, mais elle ne rafraîchit pas les données nouvellement ajoutées.

Voici ma méthode qui doit mettre à jour les données: < Pré> xxx

ps Les applications ont des chaînes de connexion différentes dans APP.Config (des comptes différents pour le même dB).


1 commentaires

3 Réponses :


9
votes

Cela devrait fonctionner:

public Measurement GetLastMeasurement(int conditionId)
{
    var entities = new Entities();
    return (from measurement in entities.Measurements
            where measurement.ConditionId == conditionId
            select measurement).OrderByDescending(cd => cd.Timestamp).First();
}


4 commentaires

La première solution que vous avez mentionnée ne retrouve toujours pas les données nouvellement ajoutées de ma base de données. Votre deuxième solution que je m'attendais à travailler, ne fonctionne pas non plus. Je ne préférerais pas cela parce que cette façon d'ouvrir un nouveau contexte sur ma base de données à chaque fois que je souhaite obtenir la dernière mesure. Lorsque je redémarre ma candidature, il rétrécit de nouvelles données, mais cela ne rétrécit pas s'il y a quelque chose ajouté pendant que l'application fonctionne. Existe-t-il une possibilité que des comptes différents que j'utilise pour chaque application (une qui ajoute et une rétrécit les données de DB) sont la raison de cela?


Avec l'une de ces deux solutions, je reçois la même chose comme si j'avais déjà eu. Si je modifie une ligne dans une table de mesures (qui a été retrouvée sur le démarrage de l'application), elle la met à jour. Mais si j'ajoute une nouvelle rangée, cela ne le retournera pas. Dans les deux cas. Cette fois, j'ai édité une nouvelle ligne existante et ajoutée directement à l'aide de mon studio SQL Manangement.


@NEBO: Êtes-vous sûr de le faire correctement? Avez-vous un profileur SQL? Pouvez-vous regarder SQL exécuté?


Hmm, il y a un problème étrange que j'ai. En fait, les deux solutions fonctionnent bien, c'est juste que ma liaison ne se met pas à jour. Je vais devoir comprendre ça. Merci!



8
votes

AS de EF 4.1 Vous pouvez utiliser une méthode asnoTracking () sur vos entités.

return myEntities.Measurements.AsNoTracking();


0 commentaires

3
votes

Une autre possibilité est d'utiliser la mégénération pour décider de la manière dont vous souhaitez gérer les objets dans le contexte. Par exemple Mergeoption.overwritChanges écrasera le contexte d'objet avec des valeurs de la source de données.

Pour plus d'informations, voir http: // msdn. Microsoft.com/en-us/Library/system.data.Object.Morgeoption.aspx


0 commentaires