1

J'ai quelques tables qui référencent la même table. Par exemple:
Personne a une adresse.
Entreprise a une adresse.Chargement rapide avec Entity Framework et Asp .net mvc (à partir d'un arrière-plan rails)

Lorsque vous utilisez les modèles que je voudrais faire dans le contrôleur:

person.Address.Zip 
business.Address.Zip 

Je viens d'un milieu de rails où je peux simplement déclarer une relation et d'avoir toutes les fonctionnalités ci-dessus. Forcer le chargement de l'adresse lorsque j'obtiens l'objet (personne ou entreprise).

Je suis nouveau cadre de l'entité, et je suis aux prises avec la façon d'atteindre cette fonctionnalité. Je ne peux pas inclure la table dans les deux modèles (personne et entreprise). Si j'utilise un modèle de référentiel et que j'ajoute les objets à un partiel pour la classe, alors j'utilise un chargement paresseux.

Est-ce que je regarde mal? Des suggestions pour les modèles que je pourrais utiliser?

Répondre

2

Si vous utilisez Entity Framework 4.0 avec chargement paresseux Visual Studio 2010 est automatique.

Si votre utilisation de Entity Framework 1.0 de votre vie en plus difficile ...

Pour charger désireux de EF1 vous devez utiliser la méthode Inclure() sur votre ObjectQuery et spécifier les propriétés de navigation (adresse). Par exemple:

ModelContainer.Persons.Where(@p => @p.Id == 39).Include("Address") 

Pour le chargement "paresseux", vous devez charger manuellement toutes les associations FK manuellement. Par exemple:

var myPeople = ModelContainer.Persons.Where(@p => @p.Id == 39 

if(!myPeople.Address.IsLoaded()) 
    myPeople.Address.Load() 

Une autre option consiste à modifier la manière dont EF1 génère vos types de modèle et inclut le chargement paresseux des portes.

http://code.msdn.microsoft.com/EFLazyLoading

+0

Merci! Cela fonctionnera parfaitement pour la façon dont j'ai réorganisé mes modèles de données d'entité. – Becky

+1

également dans le EF4 vous devez utiliser .Inclure ("Adresse") –

-1

Idéalement, vous devriez être en mesure de traverser le modèle d'objet pour obtenir la plupart des données dont vous avez besoin, en commençant par une référence à l'objet utilisateur actuel.

+0

Que voulez-vous dire? "vous devriez être capable de traverser le modèle objet pour obtenir la plupart des données dont vous avez besoin" n'est-ce pas ce que je veux dire avec: person.Address.Zip? Comment puis-je être plus clair? – Becky

+0

désolé d'être abrupt - j'essayais de dire que vous ne devriez pas créer des implémentations de dépôt inutiles, vous devriez plutôt modéliser complètement les relations d'objet - un gros modèle de données devrait le permettre. – mcintyre321

0

Auparavant, je créais un ADO.NET Entity Data Model pour chaque contrôleur.

Maintenant, j'ai créé un modèle de données pour toutes les tables (ce n'est pas une db monstrueuse). De cette façon, je peux inclure les tables lorsque je demande un chargement impatient.

Si quelqu'un a une meilleure suggestion. Faites le moi savoir. Si quelqu'un connaît le comportement correct avec une grande base de données, veuillez commenter. Voudriez-vous un grand fichier edmx pour représenter la base de données?