2010-05-26 3 views
2

Salut tout le monde, j'ai eu quelques questions concernant le .NET Entity Framework et l'utilisation de procédures stockées. Je vais savoir:Quelques questions à propos de .NET Entity Framework et des procédures stockées

  1. Je sais que nous pouvons faire un clic droit sur une procédure stockée et choisir Fonction Importer pour pouvoir utiliser le code. Y at-il un moyen de faire cela pour de nombreuses procédures stockées à la fois? Lorsque j'effectue une importation de fonction, je peux créer un nouveau type complexe ou utiliser un type complexe existant. Eh bien, comment puis-je accéder aux types/objets complexes qui sont en dehors du fichier edmx? C'est-à-dire, si j'ai une classe dans mon projet, est-il possible d'y accéder en faisant une Importation de Fonction?

  2. Lors de l'appel de la procédure stockée à partir du code, il renvoie un IEnumerable du type Complexe I défini comme. Cependant, parfois ces types complexes n'ont pas toutes les propriétés dont j'ai besoin, donc je crée une nouvelle classe dans mon projet qui hérite du type complexe utilisé dans la procédure stockée. Le problème est, je ne peux pas sembler couler le type complexe retourné de la procédure stockée à la nouvelle classe que j'ai créée. Une raison pour laquelle je ne peux pas faire ça? Ce que j'ai fini par faire est de boucler à travers le IEnumerable et d'ajouter chaque élément à une nouvelle liste de la classe que j'ai créée. Mais cela se sent et semble malpropre.

Bara

Répondre

2
  1. Peut-être que je suis malentendu, mais dans votre modèle, vous pouvez right-click>Update Model from Database. Dans l'onglet Add, sélectionnez simplement toutes les procédures stockées que vous souhaitez ajouter au modèle.

  2. Pas aussi loin que je sache. Le but d'Entity Framework est d'éviter de devoir créer vos entités manuellement (génération de code). Vous créez d'abord votre base de données et copiez-la pour modéliser ou créer un modèle en premier et générer des tables de base de données. De toute façon, les entités .NET réelles sont générées automatiquement. Si vous modifiez votre modèle ultérieurement, les entités sont régénérées. Si vous pouviez importer vos propres entités préexistantes, vous risqueriez de les avoir écrasées lorsque votre modèle changerait. Ils seraient également hors du contrôle du modèle (comment gérer s'ils sont dans des assemblages séparés, etc.?). Avec les entités partielles (plus sur cela sur # 3), vous pouvez étendre les classes générées sans risquer que vos personnalisations soient écrasées. Vous pouvez toujours utiliser vos classes existantes comme DTOs, mais vous devrez alors convertir manuellement l'entité générée par EF en objet DTO.

  3. Vous ne pouvez pas convertir une classe de base en classe dérivée. Voir: A way of casting a base type to a derived type

Je ne suis pas sûr de .NET 3.5 (EF 1), mais des entités/types complexes dans .NET 4 (EF 2) sont des classes partielles. Cela signifie que vous pouvez ajouter des membres simplement en prolongeant la classe. Ainsi, par exemple, si votre type personnalisé était:

public partial class Address 
{ 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
} 

Vous pouvez créer un nouveau fichier avec:

public partial class Address 
{ 
    public string MyProperty { get; set;} 
} 

Puis faire new Address { Address1 = "abc", MyProperty = "def" };. Ils devront tous les deux être dans le même assemblage et dans le même espace de noms.

+0

1. Après avoir ajouté les procédures stockées, vous devez toujours aller à chacune d'entre elles et effectuer une importation de fonction. En ce moment, je dois le faire individuellement, et pour des centaines de procédures stockées, cela peut devenir incontrôlable. 2. Je vois, assez juste. Votre réponse au numéro 3 vous aide beaucoup, alors merci. 3. Cela ne répond pas exactement à ma question, mais c'est une aide énorme. Je suis certain que je peux changer mon code pour travailler avec ceci. Merci pour toute l'aide :) – Bara

+0

J'essaie d'utiliser la classe partielle, et tout fonctionne correctement du point de vue du codage. Cependant, je retourne une liste de la classe en XML (en utilisant un service REST) ​​et il manque les paramètres de ma classe partielle (ex: MyProperty dans votre exemple). Une raison pour laquelle? – Bara

+0

Apparemment, l'ajout de ceci au-dessus de ma propriété le corrige: [global :: System.Runtime.Serialization.DataMemberAttribute()] ... par exemple, dans votre exemple il irait juste au-dessus de la chaîne publique MyProperty {get; ensemble; } – Bara

Questions connexes