2009-03-10 7 views
3

J'ai commencé à expérimenter avec LINQ to SQL et ce que je fais est en train de créer des classes avec des décorateurs de mappage LINQ - choisissant ainsi les parties du schéma de table db que je veux incorporer dans mes classes.Puis-je utiliser Entity Framework comme j'utilise LINQ to SQL?

Un exemple simple:

private DateTime? _LocalCopyTimestamp = (DateTime)SqlDateTime.MinValue; 
[Column(Name = "recaLocalCopyTimestamp", Storage = "_LocalCopyTimestamp", CanBeNull = true)] 
public DateTime? LocalCopyTimestamp 
{ 
    get 
    { 
     return this._LocalCopyTimestamp; 
    } 
    set 
    { 
     this._LocalCopyTimestamp = value; 
    } 
} 

Je n'utilise pas et ne suis pas disposé à recourir à des outils de modélisation en raison de projets contraintes (les modifications du schéma de manière sont traités et parce qu'il ya un schéma de base de données existante et il est un peu trop organique et non-strict)

Existe-t-il un moyen d'avoir cette flexibilité avec Entity Framework sans avoir à inclure des fichiers d'informations de schéma et/ou beaucoup de fichiers de code distincts?

Puis-je également créer des classes qui "utilisent" plus d'une table sous-jacente?

Quelqu'un peut-il me diriger vers la documentation à ce sujet?

Répondre

8

La fonctionnalité que vous demandez (écrire des classes C# et générer votre modèle à partir de celles-ci) est appelée par l'équipe Entity Framework "Model First". Il n'existe pas dans la version actuelle d'Entity Framework, mais est une fonctionnalité planifiée pour la prochaine version. Si vous regardez le Entity Framework talks from PDC, vous pouvez voir des démonstrations de cette nouvelle fonctionnalité. Avec la version actuelle, vous n'avez pas besoin d'écrire «plusieurs» fichiers de mappage, mais vous en avez besoin (le fichier EDMX) et il doit s'agir de XML.

Oui, vous pouvez créer des classes d'entités qui utilisent plusieurs tables sous-jacentes. Ceci est appelé "Entity splitting". Instructions étape par étape sur le lien. En général, vous trouverez que Entity Framework prend en charge de nombreux scénarios de mappage plus complexes que LINQ to SQL. Je crains d'être complètement en désaccord avec Marc en ce qui concerne l'écriture d'EDMX sans l'aide du concepteur. Écrire EDMX sans utiliser le concepteur n'est pas seulement possible, mais pour les projets dépassant un certain côté, c'est tout sauf inévitable. Quelques points sur ce point:

  1. Pour la plupart des débuts de l'histoire (pré-RTM, « ObjectSpaces ») de l'Entity Framework, l'écriture des fichiers XML a été manuellement la seule façon d'utiliser l'outil. Le concepteur est une fonctionnalité récente et est considérablement moins stable que Entity Framework lui-même.
  2. Certaines fonctionnalités Entity Framework, telles que les types complexes, ne sont pas prises en charge dans le concepteur.
  3. Certains scénarios de mappage, tels que le mappage de colonnes individuelles ou le mappage de tables sans relation de clé étrangère, qui peuvent être nécessaires pour les bases de données héritées, ne sont pas pris en charge dans le concepteur.
  4. Comme je l'ai mentionné dans (1) le concepteur est un peu plus buggier que l'Entity Framework lui-même. Donc, sur des projets plus importants, vous devrez probablement nettoyer après les erreurs du concepteur.
+0

Bonne réponse, je pense que d'après ce que vous avez dit, il est préférable d'attendre la prochaine version. – leppie

+0

Vos points sur le concepteur sont tous notés. Je suis également d'accord avec Leppie: je tiens à la prochaine version ;-p J'ai passé une journée à la regarder au sommet MVP - semble beaucoup mieux que l'incarnation actuelle. –

+0

"Pour la plupart de l'histoire de l'Entity Framework" ... eh bien, pour l'histoire RTM, ils ont tous les deux le même âge ... –

1

Entity Framework utilise l'EDM pour modéliser des données; Il s'agit d'un ensemble de 3 fichiers de schémas complexes (stockage, conceptuel, mapping), le plus souvent stockés en tant que ressources dans le projet (via le concepteur qui utilise un seul fichier EDMX pour générer les 3 fichiers de schéma).

Il ne supporte pas les classes attribuées pour cette information. La seule façon sensée d'écrire EDM est via le concepteur (essentiellement, un outil de modélisation que vous n'aimez pas). Re classe l'utilisation de plusieurs tables sous-jacentes; oui, une seule entité Entity Framework au niveau de la couche conceptuelle (c'est-à-dire des classes) peut s'étendre sur plusieurs tables de stockage. Ceci est particulièrement utile pour certains exemples d'héritage, mais peut aussi (IIRC) être utilisé par des modèles plats. Vous le faites via les «mappages» entre les couches de stockage et les couches conceptuelles (le plus souvent, sur l'onglet du concepteur).

Questions connexes