2009-07-23 5 views
1

J'ai ce projet où je voudrais passer du code ADO.NET habituel à un système OR/M plus productif, plus compréhensible, plus léger et plus méchant. J'ai le scénario suivant qui fonctionne actuellement, mais doit travailler avec l'OR/M ainsi:Passage à OR/M. Écrire des fichiers tout en enregistrant des objets

Commandes:

  • id
  • choses

Documents:

  • id
  • ORDER_ID
  • chemin

Lorsque je crée un nouvel ordre, je joins un document. Ce document reçoit un tableau de données binaires (un fichier PDF) et lorsque je le sauvegarde, il écrit le contenu binaire dans le chemin défini. Tout cela fonctionne et même transactionnel.

Maintenant, est-il possible de reproduire le même comportement en utilisant un OR/M? Clairement c'est quelque chose que je devrai écrire manuellement au-dessus du code OR/M généré mais est-ce faisable dans Linq-to-SQL ou nHibernate? Lequel recommanderiez-vous? Et comment pourrais-je l'accrocher pour le faire?

Il y a un autre comportement par défaut dans mon application qui est un peu difficile à répliquer je pense.

Cartes:

  • id
  • série
  • pin
  • PUK

Modems:

  • id
  • série
  • IMEI

Commandes:

  • id
  • choses

OrderLines:

  • id
  • ORDER_ID
  • trucs

OrderLineContents:

  • id
  • orderline_id
  • identifier_name
  • identifier_id

Ce que j'essaie de faire ici est de brancher une carte spécifique ou un modem spécifique à une ligne de commande. En insérant 'Modem' dans identifiant_name et ID 1 par exemple. Ce système fonctionne actuellement avec ADO.NET mais encore une fois, je me demande avec quelle facilité il est réplicable dans un OR/M. J'ai lu que L2S ne supporte que l'héritage de table unique et je pense que c'est clairement une sorte de 'chose' multi-table polymorphe.

Toute aide avec ceci serait énormément appréciée :) Je cherche un système qui pourrait faire ces deux scénarios ou peut-être changer le deuxième scénario à quelque chose d'un peu différent s'il n'y a pas d'autre choix.

Répondre

0

Je recommanderais sûrement NHibernate. Tout ce que vous mentionnez est possible. Le premier scénario est assez simple:

Instituez les entités et définissez les données sur elles. Enregistrez le fichier sur le disque. Persistez les entités dans la base de données. Enveloppez tout ce que j'essaie de comprendre pour les exceptions qui nécessitent l'annulation de la transaction ou la suppression d'un fichier écrit de manière corrompue. En ce qui concerne la partie "identificateur_nom", vous pouvez utiliser le mappage d'héritage des types de table unique et de table jointe. Mais vos classes devraient partager une classe de base commune pour le faire.Une autre approche - qui correspond plus à votre approche actuelle, mais je ne suis pas sûr que je recommanderais dans votre situation - utilise le "any" mapping, que NHibernate prend en charge.

/Asger

+0

Le tout mappage semble vraiment intéressant :) Thx! – SpoBo

Questions connexes