utilisation de SQLite à l'intérieur de bibliothèque de classes portable
récemment, nous avons commencé à travailler sur un nouveau projet qui inclut des clients pour Windows 8 Metro, Windows Phone et l'application de Bureau. il a été décidé d'utiliser le pattern MVVM comme l'Architecture, parce que le partage Viewmodel entre les projets est beaucoup plus solution acceptable pour nous.
nous avons décidé d'utiliser de bibliothèque de classes portable pour cet objet, mais le problème est qu'après le téléchargement et l'installation de SQLite pour windows runtime à partir de Visualstudio 2012 une extension de galerie, lorsque nous essayons d'ajouter une référence pour les bibliothèques appropriées nous ne voyons pas ces bibliothèques à tous. cela nous fait penser, qu'il n'est pas possible pour l'utilisation de SQLite dans la bibliothèque de classes Portable de projet.
Peut-être que certains de u déjà fait cela et sait la manière dont nous pourrions parvenir à cette fonctionnalité? merci de nous donner bonne façon de développer cette tâche que l'utilisation de SQLite et avoir un code réutilisable est très important à ce stade du développement
? c'est u pourrait expliquer un peu plus? il doit y avoir moyen de l'utiliser. par exemple, on pourrait écrire un wrapper de l'interface et l'utilisation du Cio ou DI de les fournir. toutes les autres suggestions de StackOverflow utilisateurs?
Je ne pense pas que vous pouvez faire référence à un "natif" DLL comme SQLite à partir d'une Bibliothèque de classes Portable. Cependant, prendre un coup d'oeil à la C# port de SQLite, csharp-sqlite. Il n'y a pas de PCL projet, mais il y a consacré des projets pour toutes les plates-formes d'intérêt. Vous pouvez soit faire référence à un csharp-sqlite DLL pour une plate-forme spécifique, ou vous pouvez examiner la façon dont beaucoup d'efforts, il serait de créer un PCL pour csharp-sqlite.
Bien csharo-sqlite semble être une sorte de solution pour notre tâche, mais n'est pas u pense que je serait mieux si nous créons IRepositori<T> interface à l'intérieur de notre PCL projet et le mettre en œuvre entre les différents projets? que d'utiliser le constructeur de l'injection de nous passer des implémentations concrètes à l'aide de SQLite à notre bibliothèque de classes portable de la classe du Service. ce travail? je pense que ce serait plus propre et maintenable. suis-je le droit?
OriginalL'auteur Rati_Ge | 2012-12-04
Vous devez vous connecter pour publier un commentaire.
Dans MvvmCross, nous avons abordé ce par le biais d'une approche différente.
Nous avons voulu profiter de l'ports natifs de SQLite et nous voulions utiliser l'SQLite-net ORM emballage de https://github.com/praeclarum/sqlite-net/
Ainsi, au lieu de n'utiliser qu'une PCL, ce que nous avons fait a été de:
construire un noyau PCL contenant un ensemble de croix-plate-forme de SQLite-net interfaces et les classes de base https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/Sqlite/Cirrious.MvvmCross.Plugins.Sqlite
construire une extension/réalisation de ce plugin DLL pour chaque plate-forme
utiliser un commun DI motif et de la bibliothèque, de sorte que les deux PCL et PCL non de la base de données clients de savoir comment charger et instancier ces plugins.
À un niveau de code, applications client peut utiliser le plugin comme:
Dans une logique d'entreprise de la bibliothèque (PCL ou de la plate-forme), le code peut définir un objet de modèle:
lors du démarrage de l'application peut appeler:
alors en cours de fonctionnement, le code peut faire des choses comme:
ou
Tandis que l'INTERFACE utilisateur spécifique code de référence de la plate-forme d'extension spécifique du plugin et d'injecter de la plate-forme de mise en œuvre spécifiques au sein du Cio/DI du système. Sur Droid c'est vraiment simple (parce que MonoDroid prend en charge l'Assemblage.Charge au moment de l'exécution), mais sur d'autres plates-formes, cela implique un peu de 'passe-partout' un code comme:
Notes:
le courant de MvvmCross pensions ne comprend que l'WinRT et MonoDroid SQLite wrappers - mais d'autres (WP* et MonoTouch) devrait être facile à construire (et je sais que d'autres ont construit eux, mais n'a pas encore contribué à leur retour)
le courant de MvvmCross repo inclut uniquement la synchronisation (pas async) interfaces pour WinRT - mais encore une fois je sais que les gens m'ont dit qu'ils ont prolongé dans leurs projets privés.
Je suis actuellement en train de tirer, de ce plugin structure en dehors de MvvmCross, de sorte que les plugins peuvent être utilisés plus largement. Espérons que s'attendre à une annonce sur cet avant Noël.
Pour en savoir plus sur les plugins dans MvvmCross voir https://speakerdeck.com/cirrious/mvvmcross-going-portable
C'est une excellente question - poser une nouvelle question, et vous obtiendrez une réponse!
Si vous ciblez les plates-formes qui ont déjà une Tâche<T>, alors il devrait être disponible dans votre PCL. Probablement vous ciblez Windows Phone 7.5, qui n'a pas de Tâches de soutien. Cependant, nous avons publié un forfait qui prend en charge la Tâche et async/await sur une variété de plates-formes. Consultez cet article de blog: blogs.msdn.com/b/bclteam/archive/2012/10/22/...
thank u pour votre réponse, nous avons découvert, que nous dont le ciblage de Silverlight 4 et c'était le problème après, nous avons changé nos options de ciblage Tâche<T> est maintenant disponible, mais il est bon de savoir qu'il ya une solution pour WP 7.5 ainsi
J'allais utiliser la même approche, mais je ne semble pas être en mesure d'installer sqlite-net à l'intérieur de mon PCL, ce qui signifie que je ne peux pas utiliser les attributs tels que [PrimaryKey] pour décorer mes modèles. Avoir ces attributs uniquement dans des implémentations concrètes de mes dépôts n'aide pas puisque les modèles à l'intérieur de la PCL. Comment avez-vous autour de ce problème?
OriginalL'auteur Stuart
Stuart faire une excellente explication de la façon de créer PCL avec SQLite, mais aujourd'hui j'ai trouvé cette approche et j'espère que cela peut résoudre beaucoup mieux sur toute autre question
Nouveau open source de Bibliothèque de classes Portable pour SQLite
OriginalL'auteur Diomedes Domínguez
Probablement la peine de mentionner que l'auto-incrémentation et PrimaryKey les attributs de l'espace de noms suivant
à l'aide de Cirrious.MvvmCross.Les Plugins.Sqlite;
OriginalL'auteur mike gold
Après des semaines de chasse les choses, j'ai enfin compris que vous avez à se connecter en utilisant:
Et j'ai installé
Pour tous les MVVMcross génies là-bas et tous les Sqlite génies là ce pourrait être évidente.
Personne ne mentionne nulle part et les exemples de MVVMcross que tout ne soit pas de la compilation ou de l'utilisation Sqlite.NET ce qui n'est pas MVVM, ni compatibles PCL lorsqu'en train de faire la connexion.
Oh, et cela fonctionne en Winforms, PCL, etc (je n'ai pas encore utiliser Wpf).
Mon mauvais, il fonctionne. Vous avez besoin de plus d'une entrée pour passer à un travail et à l'Insertion est très bien.
OriginalL'auteur user2959284