J'ai un tas de POCO que j'ai créés et pour lesquels je veux créer une couche persistante. Chose est, je me fous de la façon dont les données sont stockées dans SQL Server, je veux juste qu'il soit stocké. En d'autres termes, je veux dire à l'outil ORM, "Voici quelques classes POCO, les enregistrer." et ne pas avoir à faire autre chose. Existe-t-il un outil ORM pour C# capable de faire cela? J'ai eu du mal à faire fonctionner Fluent NHibernate et Subsonic ne supporte pas les relations, ce qui rend les choses comme "Obtenir tous les commentaires pour un seul article" assez difficile. Il doit être capable de générer automatiquement un schéma de base de données sans que je doive définir un tas d'attributs et ainsi de suite.Existe-t-il un outil ORM pour C# capable de «mettre en boîte noire» la base de données?
Répondre
J'utilise personnellement Fluent NHibernate et il fait pour moi ce dont vous avez besoin. Eh bien, presque. Il y a quelque chose comme le besoin de spécifier manuellement ManyToMany mais vous ne pouvez pas l'éviter. Et si vous voulez concevoir de bonnes entités, vous devez rendre certains membres privés, ce qui désactive l'automapping pour ces membres. Pourtant, j'ai changé BEAUCOUP de design et je n'ai même jamais pensé à la façon dont mon DB est changé (un luxe d'un nouveau projet, mais ...).
Avez-vous regardé Castle ActiveRecord? Avez-vous vraiment besoin de vrais POCO, ou vous pouvez vivre avec des attributs et .Save sur les entités? Eh bien, je l'éviterais mais cela pourrait marcher pour vous.
Deux problèmes que j'ai rencontrés avec Fluent NHibernate en utilisant l'automapping étaient: 1. ça craquait quand j'essayais d'utiliser une colonne Dictionary, et 2. ça ne mappait pas les enums, dont j'ai une tonne.Le premier problème est compréhensible (j'aurais dû envelopper la paire clé/valeur dans une classe à la place), mais je n'ai pas trouvé de solution pour la seconde. –
J'utilise enums sans problèmes. J'ai eu des problèmes avec cela, mais Google a aidé avec des solutions simples. Il y a beaucoup de questions à ce sujet ici, et c'était facile à résoudre. Je ne peux pas dire exactement maintenant, mais je viens d'ajouter IPropertyConvention aussi loin que je me souvienne, qui dit d'utiliser GenericEnumMapper pour enums, voir http://stackoverflow.com/questions/439003/how-do-you-map-an-enum -as-an-int-value-with-fluent-nhibernate, bien que vous souhaitiez utiliser CustomTypeIs (typeof (int)). Quoi qu'il en soit, ce n'est pas le plus gros problème avec FNH ;-) – queen3
Il s'avère que Fluent NHibernate 1.0 RTM peut très bien automatiser les enums (pour les chaînes cependant), mais ne peut pas faire de collection d'enums. Regarder si c'est possible ou pas maintenant. –
Si vous ne vous souciez pas comment il est stocké que pourquoi SQL Server? Que diriez-vous de couchDB http://couchdb.apache.org/docs/intro.html
Parce que SQL Server est ce que notre société et le client utilise. –
Découvrez Subsonics SimpleRepository. Créez une classe, créez une base de données, attribuez une chaîne de connexion à Subsonic et manipulez le reste. Nifty.
SimpleRepository ne prend pas en charge la génération de relations. C'est bien si vous avez des objets simples qui n'ont pas besoin de relations (comme un seul billet de blog), mais que faites-vous dans les situations où vous avez besoin d'une relation (comme les commentaires qui appartiennent à un poste particulier)? –
Jetez un oeil à eXpress Persistent Objects de DevExpress
Je l'ai regardé, mais comme vous devez hériter de XPObject, il transforme les objets POCO en objets prenant en compte la persistance. –
Vous pouvez essayer DataObjects.Net, mais ce n'est pas exactement ce que vous recherchez. Tout d'abord, ses entités ne sont pas poco, vous devez les hériter de certains types de base. Deuxièmement, vous devez marquer les champs que vous souhaitez enregistrer avec un attribut spécial.
Alors pourquoi je recommande DataObjects alors? Parce que je pense que c'est complètement la base de données des boîtes noires. Vous faites juste un tas d'objets et demandez à ORM de les sauvegarder.
- Il génère automatiquement un schéma de base de données dans le SGBDR spécifié au moment de l'exécution.
- Vous n'avez pas à appeler des méthodes comme .Save() pour enregistrer les modifications, il suffit de travailler comme avec les objets habituels.
- Vous n'avez pas besoin d'écrire des requêtes SQL - il prend entièrement en charge LINQ.
- Vous n'avez pas à gérer les scripts SQL même lorsque la base de données existante est mise à niveau vers la version suivante. Subsonic supporte les relations s'il y a des relations de clé étrangère dans la base de données.
- 1. Outil de test unitaire pour la base de données Sybase
- 2. Outil d'estimation de la taille de la base de données
- 3. Mettre en forme un événement d'étiquette de base de données
- 4. Besoin d'un outil pour convertir la base de données postgres en mysql
- 5. Mettre en surbrillance le code de la base de données
- 6. Cadre de test pour les tests de régression de boîte noire
- 7. Un bon outil pour remplir la base de données avec des données factices?
- 8. Existe-t-il un outil pour voir les requêtes s'exécuter sur la base de données?
- 9. Connectivité de la base de données C++?
- 10. comment mettre à jour dataGrid dans la base de données
- 11. Outil de comparaison de base de données DB2
- 12. Mettre à jour les varchar en double pour être unique dans la base de données SQL
- 13. Outil de modélisation de base de données non relationnel?
- 14. Détacher la base de données/mettre hors ligne échoue
- 15. Crypter la base de données SQLite en C#
- 16. ASP.Net: Comment mettre à jour la base de données?
- 17. en utilisant dataadpter comment mettre à jour les données dans la base de données
- 18. Mettre le texte en surbrillance dans la boîte aux messages
- 19. Base de données pour un système embarqué
- 20. asp.net outil d'administration web base de données personnalisée
- 21. Comparaison de la bibliothèque de base de données SQL C++
- 22. Comment faire pour mettre en liste blanche/liste noire les champs d'objet enfant dans la méthode ModelBinder/UpdateModel?
- 23. Suppression de la bordure noire autour d'une image
- 24. Quels paramètres pour une base de données en lecture et quels paramètres pour une base de données en écriture?
- 25. Impossible d'obtenir la base de données pour mettre à jour la dernière heure de connexion en utilisant PHP et MySQL?
- 26. Liaison de base de données dynamique en C#
- 27. Outil de nettoyage de C à C pour traducteur/code
- 28. Transactions de base de données imbriquées en C#
- 29. Comment créer un rôle à mettre dans la base de données?
- 30. Bibliothèque de base de données Greenleaf en C#
Cela devrait être aussi simple qu'itérer 'Post.Comments' ... –
Oui, si vous utilisez ActiveRecord et que vous allez en bas. Cependant, je fais de haut en bas en utilisant SimpleRepository, et jusqu'à présent, il ne supporte pas encore les relations. –
Les problèmes ont tendance à apparaître lorsque le groupe de rapports souhaite interroger le schéma généré automatiquement dans six mois. Personnellement, je conçois mes cours, conçois mes tables et mes relations (éventuellement avec l'aide d'administrateurs de bases de données), puis les cartographie. – TrueWill