Recharger une entité et l'ensemble de la Navigation de la Propriété de l'Association - DbSet Entity Framework

J'ai un problème avec l'entité de l'association d'actualisation. Quand j'ai une entité comme ceci:

MyContext context = new MyContext();

Person myPerson = context.PersonSet.FirstOrDefault();
String myPersonName = myPerson.Name;
Address myPersonAddress = myPerson.Address;

Je suis une personne avec une association nommée l'Adresse et une propriété nommée Nom. Si je modifie manuellement les données dans la base de données par exemple le Nom de la propriété, j'ai utiliser le code suivant pour recharger mon entité:

context.Entry(myPerson).Reload();

et j'ai la nouvelle valeur de Nom. Mais Si je fais la même chose pour l'Adresse, ça ne fonctionne pas. Je pense que c'est parce que l'Adresse est une propriété d'association. J'ai besoin de l'actualiser.

Comment puis-je faire pour forcer le rechargement de l'Adresse de l'association (et tous les autres de l'association dans la classe Personne) ?

EDIT:

Dans le même cas, une personne peut avoir plus d'une adresse.

MyContext context = new MyContext();

Person myPerson = context.PersonSet.FirstOrDefault();
String myPersonName = myPerson.Name;
List<Address> myPersonAddresses = myPerson.Addresses;

Dans ce cas, il n'est pas une Référence:

context.Entry(myPerson).Reference(p => p.Address).Load();
//Address will be populated with only the new address
//this isn't required because I use lazy loading

mais une Collection:

context.Entry(myPerson).Collection(p => p.Addresses).Load();
//Address will be populated with old value and new value

J'ai besoin de l'utiliser pour le travail:

context.Entry(myPerson).Collection(p => p.Addresses).CurrentValue.Clear();
context.Entry(myPerson).Collection(p => p.Addresses).Load();

Mais il ne semble pas être une bonne solution pour le faire pour tous mes propriétés de navigation!

  • Voulez-vous dire que context.Entry(myPersonAddress).Reload() n' pas travail?
  • oui cela signifie qui NE fonctionne PAS. Parce que cette méthode de recharge uniquement la propriété (=Nom) et n'est pas l'association (=Adresse)
  • Ah, désolé j'ai mal compris. Donc, vous ne voulez pas pour recharger les propriétés scalaires de la même Address entité mais le rapport à peut-être un autre Address entité. Hum, bonne question...
  • Ne Person avoir un exposé propriété de clé étrangère pour la Address propriété de navigation?
  • Comment puis-je exposer une propriété de clé étrangère ? Que voulez-vous dire ? J'ai une propriété de navigation dans mon .csdl
  • Une propriété qui représente la clé étrangère à Address, quelque chose comme public int AddressId { get; set; } dans votre Person classe.
  • 😮 Désolé, j'ai mal compris. Oui, bien sûr, j'ai une propriété publique pour y accéder.

InformationsquelleAutor Sam | 2012-01-31