Comment puis-je générer une classe à partir d'un objet table SQL Server?
Je ne parle pas d'utiliser un ORM. J'ai juste besoin de créer les entités (classe simple). Quelque chose comme:
public class Person
{
public string Name { get;set; }
public string Phone { get;set; }
}
Étant donné un tableau comme:
+----+-------+----------------+
| ID | Name | Phone |
+----+-------+----------------+
| 1 | Alice | (555) 555-5550 |
| 2 | Bob | (555) 555-5551 |
| 3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
c#
sql
sql-server
tsql
Gui
la source
la source
Réponses:
Définissez @TableName sur le nom de votre table.
la source
end
etColumnType
dans le script SQL d'Alex.+ CASE WHEN col.is_nullable=1 AND typ.name NOT IN ('binary', 'varbinary', 'image', 'text', 'ntext', 'varchar', 'nvarchar', 'char', 'nchar') THEN '?' ELSE '' END
float' then 'float'
" en "when 'float' then 'double'
et vous devriez changer"when 'real' then 'double'
"en"when 'real' then 'float'
. "Il semble que vous ayez confondu ces types. L'équivalent C # d'un flotteur SQL est un double et l'équivalent C # d'un réel SQL est un flottant .print @Result
àprint CAST(@Result AS TEXT)
sinon elle sera tronquée sur les grandes tables.Je n'ai pas pu obtenir la réponse d'Alex pour travailler sur Sql Server 2008 R2. Donc, je l'ai réécrit en utilisant les mêmes principes de base. Il permet désormais des schémas et plusieurs correctifs ont été apportés pour les mappages de propriétés de colonne (y compris le mappage des types de date nullable aux types de valeur C # nullable). Voici le Sql:
Il produit C # comme le suivant:
Cela peut être une idée d'utiliser EF, Linq to Sql, ou même un échafaudage; cependant, il peut arriver qu'un codage comme celui-ci soit utile. Franchement, je n'aime pas utiliser les propriétés de navigation EF où le code qu'il génère a effectué 19 200 appels de base de données distincts pour remplir une grille de 1 000 lignes. Cela aurait pu être réalisé en un seul appel de base de données. Néanmoins, il se peut que votre architecte technique ne veuille pas que vous utilisiez EF et similaires. Donc, vous devez revenir à du code comme celui-ci ... Soit dit en passant, cela peut également être une idée de décorer chacune des propriétés avec des attributs pour DataAnnotations, etc., mais je garde ce strictement POCO.
EDIT Fixed for TimeStamp and Guid?
la source
Version VB
la source
float
devrait allerDouble
,byte[]
àByte()
Un peu tard mais j'ai créé un outil web pour aider à créer un objet C # (ou autre) à partir du résultat SQL, de la table SQL et de SQL SP.
sql2object.com
Cela peut vraiment vous éviter d'avoir à taper toutes vos propriétés et types.
Si les types ne sont pas reconnus, la valeur par défaut sera sélectionnée.
la source
CREATE TABLE
choses afin que je puisse tout couper et coller. De plus, si vous en avez l'occasion, vous pouvez ajouter un `` Trim () '' - il échoue s'il y a une ligne vierge au début et que les gens y renonceront. Simple si vous savez le supprimer - mais vous perdrez des gens lorsque vous donnerez une erreur.J'essaye de donner mes 2 cents
0) QueryFirst https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFirst Query-first est une extension Visual Studio pour travailler intelligemment avec SQL dans des projets C #. Utilisez le modèle .sql fourni pour développer vos requêtes. Lorsque vous enregistrez le fichier, Query-first exécute votre requête, récupère le schéma et génère deux classes et une interface: une classe wrapper avec les méthodes Execute (), ExecuteScalar (), ExecuteNonQuery (), etc., son interface correspondante et une encapsulation POCO une ligne de résultats.
1) Sql2Objects Crée la classe à partir du résultat d'une requête (mais pas du DAL)
2) https://docs.microsoft.com/en-us/ef/ef6/resources/tools
3) https://visualstudiomagazine.com/articles/2012/12/11/sqlqueryresults-code-generation.aspx
4) http://www.codesmithtools.com/product/generator#features
la source
Oui, ils sont parfaits si vous utilisez un ORM simple comme Dapper.
Si vous utilisez .Net, vous pouvez générer un fichier XSD au moment de l'exécution avec n'importe quel DataSet à l'aide de la méthode WriteXmlSchema. http://msdn.microsoft.com/en-us/library/xt7k72x8(v=vs.110).aspx
Comme ça:
De là, vous pouvez utiliser xsd.exe pour créer une classe qui est sérialisable XML à partir de l'invite de commandes du développeur. http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx
comme ça:
la source
Pour imprimer les propriétés NULLABLE, utilisez ceci.
Il ajoute une légère modification au script d'Alex Aza pour le
CASE
bloc d'instructions.la source
J'ai essayé d'utiliser les suggestions ci-dessus et dans le processus, j'ai amélioré les solutions de ce fil.
Disons que vous utilisez une classe de base (ObservableObject dans ce cas) qui implémente l'événement PropertyChanged, vous feriez quelque chose comme ça. J'écrirai probablement un article de blog un jour sur mon blog sqljana.wordpress.com
Veuillez remplacer les valeurs des trois premières variables:
La classe de base est basée sur l'article de Josh Smith ici http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/
J'ai renommé la classe qui s'appellera ObservableObject et j'ai également profité de la fonction ac # 5 en utilisant l'attribut CallerMemberName
Voici la partie que vous allez aimer encore plus. J'ai construit un script Powershell pour générer pour toutes les tables d'une base de données SQL. Il est basé sur un gourou de Powershell nommé cmdlet Invoke-SQLCmd2 de Chad Miller qui peut être téléchargé à partir d'ici: http://gallery.technet.microsoft.com/ScriptCenter/7985b7ef-ed89-4dfd-b02a-433cc4e30894/
Une fois que vous avez cette applet de commande, le script Powershell à générer pour toutes les tables devient simple (remplacez les variables par vos valeurs spécifiques).
la source
Si vous avez accès à SQL Server 2016, vous pouvez utiliser l'option FOR JSON (avec INCLUDE_NULL_VALUES) pour obtenir la sortie JSON à partir d'une instruction select. Copiez la sortie, puis dans Visual Studio, collez spécial -> collez JSON en tant que classe.
Une sorte de solution budgétaire, mais qui pourrait vous faire gagner du temps.
la source
PROCEDURE de création pour créer du code personnalisé à l'aide d'un modèle
créez maintenant du code personnalisé
par exemple classe c #
la sortie est
pour LINQ
la sortie est
pour la classe java
la sortie est
pour le modèle android sugarOrm
la sortie est
la source
Pour imprimer les propriétés NULLABLE AVEC DES COMMENTAIRES (Résumé), utilisez ceci.
C'est une légère modification de la première réponse
la source
Visual Studio Magazine a publié ceci:
Génération de classes POCO .NET pour les résultats de requête SQL
Il a un projet téléchargeable que vous pouvez créer, lui donner vos informations SQL et il lancera la classe pour vous.
Maintenant, si cet outil vient de créer les commandes SQL pour SELECT, INSERT et UPDATE ....
la source
Commercial, mais CodeSmith Generator le fait: http://www.codesmithtools.com/product/generator
la source
Je suis confus quant à ce que vous voulez en sortir, mais voici les options générales lors de la conception de ce que vous voulez concevoir.
la source
En remerciement de la solution d'Alex et de Guilherme pour avoir demandé, j'ai créé ceci pour que MySQL génère des classes C #
la source
Grab QueryFirst , extension de Visual Studio qui génère des classes wrapper à partir de requêtes SQL. Vous obtenez non seulement ...
Et en bonus, ça va se jeter ...
Voulez-vous vraiment baser vos classes directement sur vos tables? Les tables sont une notion de stockage de données statique et normalisée qui appartient à la base de données. Les cours sont dynamiques, fluides, jetables, spécifiques au contexte, peut-être dénormalisés. Pourquoi ne pas écrire de vraies requêtes pour les données que vous souhaitez pour une opération et laisser QueryFirst générer les classes à partir de cela.
la source
Ce message m'a sauvé plusieurs fois. Je veux juste ajouter mes deux cents. Pour ceux qui n'aiment pas utiliser les ORM et écrivent à la place leurs propres classes DAL, lorsque vous avez comme 20 colonnes dans une table et 40 tables différentes avec leurs opérations CRUD respectives, c'est douloureux et une perte de temps. J'ai répété le code ci-dessus, pour générer des méthodes CRUD basées sur l'entité de table et les propriétés.
Bien sûr, son code n'est pas à l'épreuve des balles et peut être amélioré. Je voulais juste contribuer à cette excellente solution
la source
légèrement modifié par rapport à la réponse du haut:
ce qui rend la sortie nécessaire pour une déclaration LINQ complète en C #
la source
Le moyen le plus simple est EF, Reverse Engineering. http://msdn.microsoft.com/en-US/data/jj593170
la source
J'aime configurer mes cours avec des membres locaux privés et des accesseurs / mutateurs publics. J'ai donc modifié le script d'Alex ci-dessus pour le faire également pour tous ceux qui sont intéressés.
la source
Un petit ajout aux solutions précédentes:
object_id(@TableName)
ne fonctionne que si vous êtes dans le schéma par défaut.fonctionne dans n'importe quel schéma à condition que @tableName soit unique.
la source
Dans le cas où cela serait utile à quelqu'un d'autre, travaillant sur une approche Code-First utilisant des mappages d'attributs, je voulais quelque chose qui me laissait juste besoin de lier une entité dans le modèle d'objet. Donc, grâce à la réponse de Carnotaurus, je l'ai étendu selon leur propre suggestion et j'ai fait quelques ajustements.
Cela repose donc sur cette solution composée de DEUX parties, toutes deux des fonctions SQL Scalar-Valued:
Utilisation depuis MS SQL Management Studio:
entraînera une valeur de colonne que vous pouvez copier et coller dans Visual Studio.
Si cela aide quelqu'un, alors tant mieux!
la source
J'ai regroupé les idées de plusieurs réponses basées sur SQL ici, principalement la réponse racine d'Alex Aza, dans klassify , une application console qui génère toutes les classes pour une base de données spécifiée à la fois:
Par exemple, étant donné une table
Users
qui ressemble à ceci:klassify
va générer un fichier appeléUsers.cs
qui ressemble à ceci:Il produira un fichier pour chaque table. Jetez ce que vous n'utilisez pas.
Usage
la source
Je pensais juste ajouter ma propre variante de la réponse la plus élevée pour tous ceux qui seraient intéressés. Les principales caractéristiques sont:
Il ajoutera des attributs System.Data.Linq.Mapping à la classe et à chaque propriété. Utile pour toute personne utilisant Linq to SQL.
la source
Vous venez de le faire, tant que votre table contient deux colonnes et s'appelle quelque chose comme «tblPeople».
Vous pouvez toujours écrire vos propres wrappers SQL. En fait, je préfère le faire de cette façon, je déteste le code généré, de toute façon.
Créez peut-être une
DAL
classe et une méthode appeléeGetPerson(int id)
, qui interroge la base de données pour cette personne, puis crée votrePerson
objet à partir du jeu de résultats.la source