Question

NHibernate n’est pas vraiment adapté à notre environnement en raison de toutes les dépendances. (Château, log4net etc.)

Existe-t-il une bonne alternative légère?

La prise en charge de bases de données basées sur des fichiers simples telles que Access / SQLite / VistaDB est essentielle.

Idéalement, quelque chose contenu dans un seul assemblage ne faisant référence qu'à des assemblys .NET. S'il ne nécessite que .NET Framework 2.0 ou 3.0, il s'agit d'un bonus.

Était-ce utile?

La solution

En règle générale, pour que votre base de données fonctionne avec .net, vous avez besoin d'un fournisseur ADO.Net.

Pour MS Access (Jet), le fournisseur est livré avec .net. Pour SQLite, il existe un fournisseur ADO.Net autonome.

En ce qui concerne la bibliothèque de couche d'accès aux données, si vous souhaitez une abstraction sur ADO.Net:

Tous ceux qui travaillent bien à partir de framework 2.0 et supérieur.

Fondamentalement, vous choisissez (et il y a beaucoup de choix)

Autres conseils

Massive - https://github.com/robconery/massive

ou

PetaPoco - https://github.com/toptensoftware/petapoco

Les deux sont un seul fichier .cs sans dépendance, à l'exception de ce que contient le GAC.

(divulgation complète, PetaPoco est quelque chose que j'ai écrit)

Pour un ORM léger, performant et ne nécessitant qu'un seul assemblage, pourquoi ne pas essayer Lightspeed de Mindscape. Ce n'est pas open-source, bien que la source soit disponible et à un prix raisonnable - le risque avec la plupart des ORM qui ne sont pas bien adoptés est bien sûr la qualité et le niveau de support, et il y a très peu d'autres ORM open source qui valent la peine d'être dérangés. Espace net en ce moment.

En raison de votre aversion pour les dépendances de NHibernate, il semble que vous n’ayez pas besoin d’un cadre d’exploitation forestière ni de l’une des facettes du projet de château, telles que IoC, Monorail, etc. Avez-vous envisagé de ne prendre que le strict minimum, y compris les exigences de NHibernate ( Je pense que log4net et les collections Iesi, ainsi que le proxy dynamique du projet Castle?) et leur exécution par ILMerge pour les consolider en un seul assemblage - cela peut prendre un peu de bidouillage, mais ce n’est pas trop difficile - ou vous pouvez simplement tirer le le code source de chacun de ces projets dans une version personnalisée de NHibernate que vous entretenez pour votre organisation et qui ajuste les fonctionnalités non requises par votre projet / organisation - ce n'est pas aussi difficile / difficile que cela puisse paraître et j'ai fait quelque chose dans ce sens pour un projet pour lequel nous voulions bénéficier d’un ORM, mais nous devions réduire la taille des fichiers / installateurs distribués.

De plus, êtes-vous peut-être en mesure d'expliquer ce qui vous semble trop "lourd"? à propos d’une solution basée sur Nhibernate ... selon mon expérience, c’est un cadre ORM relativement léger comparé à certains.

En ajoutant à cette liste, vous pouvez également consulter Dapper (écrit pour et utilisé par StackOverflow lui-même).

certaines des alternatives:
- ActiveRecord - il utilise nhibernate.dll en arrière-plan, mais la configuration est effectuée à l'aide d'attributs. C'est comme une version allégée de nhibernate
- Subsonic . - CoolStorage.NET - je l'ai beaucoup utilisé pour de petits projets. Fonctionne bien avec le nombre de dbs

Voici une grande liste des alternatives, celles que je recommanderais:

  • Coolstorage
  • SOODA
  • ODX
  • Lightspeed (gratuit pour 8 objets ou moins)

Ces 4 sont les plus légers. Subsonic, ActiveRecord et d’autres sont destinés aux grands systèmes. Ils fonctionnent bien sur des systèmes plus petits mais (au moins pour ActiveRecord) viennent avec une liste énorme de dépendances et sont excessifs pour un petit système. Avec Lightspeed, je dirais que tout objet de moins de 8 objets est un petit système, et simplement utiliser NHibernate parce qu'il est largement adopté est bon pour la mise à l'échelle, mais à court terme n'a aucun sens - et avoir une couche entre l'ORM et vos consommateurs peut fonctionner autour de cela de toute façon.

LINQ to SQL pourrait être une bonne alternative à "heave". Les systèmes ORM si vous l’utilisez correctement.

Si vous n'avez pas besoin d'ORM entièrement fonctionnel et que vous avez simplement besoin d'une couche de données rapide indépendante de la base de données via ADO.NET, essayez un code source ouvert Bibliothèque NI.Data (V2) . Il est très léger (un seul petit assemblage, pas d'autres dépendances), fournit toute l'infrastructure de couche de données standard:

  • abstraction de requête et analyseur syntaxique pour sa représentation sous forme de chaîne appelée 'relex' (elle ressemble à: "livres (rating = 5) [title, id]" - une très bonne alternative à Linq-to-SQL et des expressions pouvant être composées à la volée)
  • Concept 'view' pour l'encapsulation de requêtes SQL complexes dépendantes de la syntaxe DB
  • déclencheurs de données
  • autorisations de couche de données pour les requêtes de sélection / mise à jour / suppression
  • de la boîte prend en charge les fournisseurs MS SQL, SQLite, MySQL, Odbc / OleDb (MS Access). La prise en charge d’autres bases de données SQL pourrait facilement être ajoutée.

Son composant principal (DALC) initialisé avec une seule ligne de code:

var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);

c'est tout. Si vous avez besoin du support d'exécution .NET 2.0, vous pouvez essayer de compiler la dernière version de V2 sous le runtime 2.0 ou d'utiliser la version précédente (NI.Data.Dalc, V1).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top