Entity Framework: Ignorer Les Colonnes
J'ai une base de données que je souhaite construire un modèle EF de, cependant je ne veux pas inclure certaines colonnes de la base de données que les colonnes concernées sont maintenues exclusivement sur le serveur et ne doivent pas être manipulé par n'importe quelle application.
Les deux colonnes sont de type DateTime (si cela fait une différence), l'une des colonnes est nullable et est maintenu par un trigger sur les mises à jour et les autres n'est pas les valeurs null et que définie à l'aide d'une valeur par défaut dans la définition de la table.
Je suppose que je suis à la recherche de quelque chose comme le "Générées par le Serveur" option dans Linq2Sql; mais je ne trouve pas une telle option.
Quelqu'un peut-il me dire comment contourner ce problème?
Mise en garde:
J'ai essayé d'introduire de l'entreprise objet de la modélisation à mon lieu de travail depuis quelques années et il a toujours été rejeté en raison de la quantité de code supplémentaire qui a à la main une manivelle. EF est actuellement considérée comme une solution viable en raison de la designer et la génération de code, par conséquent, toute option qui implique de la main-d'embobiner le XML va tourner le reste de mes collègues à l'écart de EF. Je suis donc à la recherche de quelque chose qui peut être fait en utilisant le concepteur ou à l'aide de code.
EDIT:
Je suppose que ce que je cherche ici est soit...
(a) un moyen de créer le modèle sans EF référencement sur les colonnes dans le magasin (ssdl) et, par conséquent, ne pas chercher à les manipuler de toute façon
(b) un moyen de par programmation à l'ensemble de la "StoreGeneratedPattern" attribut contre la propriété lorsque je crée le ObjectContext (la réponse est simple à manipuler manuellement cette dans le .lsed, mais ce serait alors remplacée si j'ai actualisé le modèle de la base de données et je ne peux pas aller en bas de la route où l' .csdl, .msl & .trois laboratoires sont à actionnement).
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous faire cela avec Entity Framework? Oui, c'est facile. Pouvez-vous faire cela avec Entity Framework designer? Malheureusement, c'est beaucoup plus difficile.
Le problème que vous rencontrez, c'est que la colonne existe dans le schéma de stockage (SSDL) dans votre EDMX. Retrait de la colonne avec le GUI designer simplement retire de la client schéma, et non à la cartographie ou le schéma de stockage. Cependant, il est assez simple d'aller dans l'EDMX et l'enlever. Après avoir fait cela, vous pouvez également le retirer de la cartographie dans le client de schéma des parties de l'EDMX, et entity framework plus se plaindre qu'il est non cartographiées.
Problème résolu, à droite?
Eh bien, non. Lorsque vous utilisez l'interface graphique designer pour mettre à jour l'EDMX à partir de la base de données, le schéma de stockage est jeté et re-généré. Si votre colonne va revenir. Autant que je sache, il n'y a aucun moyen de dire le GUI designer à jamais la carte d'une colonne particulière. Ainsi, vous devrez faire cela chaque fois que vous mettez à jour avec le GUI designer. Heureusement, l'EDMX est XML, de sorte que vous pouvez le faire avec une transformation XML, LINQ, ou XML outil de votre choix.
Pouvez-vous ne pas créer une vue avec les colonnes dont vous avez besoin et de les importer par le biais de l'entité de fonction d'assistant et de l'associer à votre entités?
Pensez-vous pas que la colonne apparaissent dans le modèle à tous?
Essayez de sélectionner la colonne dans le Concepteur de vue et en appuyant sur la touche suppr.
Modifier
Vous pouvez faire le setter de la propriété privée. Ensuite, votre application ne sera pas en mesure de modifier la valeur.
Vous pouvez modifier le modèle de texte d'ignorer ces colonnes lors de la génération de vos classes d'entités. Par exemple, si vous avez ajouté "IGNORER" pour la documentation résumé, vous pouvez modifier le modèle pour les ignorer en remplaçant;
avec;
Clic droit sur le champ de la représentation graphique et choisissez supprimer. J'ai constaté que, parfois, vous obtiendrez des erreurs lorsque vous faites beaucoup de changements à la modélisation à la fois et de commencer à perdre la trace de vos modifications. Votre meilleur pari serait de reconstruire l'EF modèle généré.
Gardez à l'esprit que lorsque vous "mise à jour de la base de données", que les vieux champs sur les modèles générés ne seront pas supprimés, vous devez les supprimer manuellement. Par exemple, si vous avez renommé DateField1 à DateField2 dans votre base de données, puis vous "mettre à Jour le Modèle de Base de données", vous allez maintenant voir les deux DateField1 et DateField2 sur le modèle résultant. Cela peut être une cause d'erreurs.
Timestamp est un type de données différent de DateTime. Timestamp semble être reconnu comme un attribut du moteur gère, un peu comme un attribut d'identité. Vous ne pouvez pas "mise à jour" d'un attribut de l'horodatage. Par conséquent, l'EDM pouvez gérer correctement (comme il le fait d'une identité).