Generisches Repository für SQLite-Net Xamarin-Projekt
Frage ich mich, ob es einen Weg gibt, zu schreiben, ein generisches repository für meine Xamarin Projekt-versus schreiben, ein anderes Repository für jede Entität in meinem Objekt. Die Xamarin Tasky Pro Beispiel haben ein Repository für die Aufgabe ein entity-denn das ist die einzige Entität ist, die es hat.
In meinem eigenen Projekt habe ich mehr als eine Entität, so meine Frage ist wie kann ich das machen
die folgenden Customer-Repository zu generisch, so dass die ProductManager, EmployeeManager, etc. verwenden können. Wenn Sie wissen, ein Beispiel oder einen blog-post, bitte zeigen Sie mir die richtige Richtung
namespace App.DataLayer
{
public class CustomerRepository
{
private ProntoDatabase _db = null;
protected static string DbLocation;
protected static CustomerRepository Me;
static CustomerRepository()
{
Me = new CustomerRepository();
}
protected CustomerRepository()
{
//set the db location;
DbLocation = DatabaseFilePath;
//instantiate the database
_db = new ProntoDatabase(DbLocation);
}
public static string DatabaseFilePath
{
get
{
const string sqliteFilename = "CustomerDB.db3";
var libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, sqliteFilename);
return path;
}
}
//CRUD (Create, Read, Update and Delete) methods
public static Customer GetCustomer(int id)
{
return Me._db.GetItem<Customer>(id);
}
public static IEnumerable<Customer> GetCustomers()
{
return Me._db.GetItems<Customer>();
}
public static int SaveCustomer(Customer item)
{
return Me._db.SaveItem(item);
}
public static int DeleteCustomer(int id)
{
return Me._db.DeleteItem<Customer>(id);
}
}
Sie haben nun passieren in einer Implementierung ISQlitePlatform in der SQLiteConnectionWithLock und SQLiteConnection Konstruktoren. Die richtige Plattform-Implementierung wird dem Projekt automatisch Hinzugefügt.
InformationsquelleAutor Val Okafor | 2015-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine alte Frage, aber hier ist meine Umsetzung.
Im mit asynchronen verbindungen, wie Sie bieten eine bessere performance in mobile-Projekten. Die nuggets habe ich installiert sind
Sqlite.Net-PCL
/SQLite.Net.Async-PCL
auf das Core-Projekt und die entsprechenden nuget in das Android-Projekt.Mein Repository sieht wie folgt aus:
Einige Beispiele auf, wie es zu benutzen:
Wenn das Repository nicht erfüllt Ihre Abfrage benötigt, können Sie AsQueryable():
Der Besitzer hat nicht börsennotierte
Sqlite.Net.Platform.XamarinAndroid
Paket. Dies könnte bedeuten, dass das Paket veraltet ist oder nicht mehr verwendet werden. LINKWie hat diese Arbeit ohne die "public class Repository<T> : IRepository<T> where T : class, new()"
Konnten Sie eine Lösung finden? Mein compiler beschwert sich abuout "public class Repository<T> : IRepository<T> where T : new()". Die Fehlermeldung ist :"Der Typ 'T' muss ein Referenztyp sein, um es zu verwenden als parameter " T "in der generischen Typ oder Methode" IRepository<T>'"
Fügen Sie "Klasse" weiter zu der Schnittstelle, wo . einfach Klasse "public class Repository<T> : IRepository<T> where T : class, new()"
InformationsquelleAutor xleon
Meine Implementierung mit Hilfe der unity IOC ist unten gegeben, Mein Projekt beinhaltet die PCL -, Xamarin Android & Xamarin iOS-Projekte
Definieren eine Basis-Modell mit den primär-Schlüssel
Definieren Sie eine generische base-repository wie unten gezeigt
Definieren zwei Beispiel-Klassen, die geerbt werden von den BaseModel
Registrieren
beheben, wie dies
InformationsquelleAutor Shyju M