Frage

Die DataContext.GetTable () Methode wird ein Objekt des Typs zurückgeben:

System.Data.Linq.Table

Durch das zu tun, nehme ich an ich habe nicht einen Aufruf an die Datenbank ausgegeben, um die gesamte Tabelle abzurufen. Andernfalls würde LINQ etwas ineffizient sein.

Deshalb alles, was ich getan habe, ist Bohrer in meine stark typisierte Datacontext-Klasse (zB dbDataContext) auf einen Griff zu greifen, zum Beispiel seiner „Kunden“ Eigenschaft, die die Tabelle Customers in SQL Server darstellt.

Ich kann dann eine IQueryable aus dem von GetTable () zurückgegebene Objekt erhalten und noch nicht auf die Datenbank getroffen habe. Das heißt, mein ‚Service Layer‘ Code wird LINQ eher Objekte als Linq zu Sql.

Durch all dies tut, werde ich die Anzahl der Depots reduzieren, die ich brauche.

Frage:

Sind die obigen Annahmen korrekt?

Hinweis:

Ich versuche, einen Weg zu Figur meiner Abfragen zu bauen Schnittstellen und die Verwendung von Generika es testbar zu machen und alles, was doo dah.

So, entlang der Linien des Denkens @ Zowen Antwort auf:

Repository Muster: Eine Repository-Klasse für jede Entität

Ich versuche,

zu implementieren
public interface IQueryProvider<T>
{
     TResult Query<TResult>(Func<IQueryable<T>, TResult> query);
}

Ich weiß nicht unbedingt notwendig, aber ich werde durch die Lernkurve und Blick auf den architektonischen Möglichkeiten, dass Anzug mich und wie ich denke.

Was ich versuche zu tun:

Ich versuche, die folgenden für SQL Server anstelle von MongoDB zu implementieren:

public class MongoQueryProvider<T> : IQueryProvider<T>
{
    private readonly IMongoCollection<T> collection;

    public MongoQueryProvider(IMongoDatabase database)
    {
        this.collection = database.GetCollection<T>();
    }

    public TResult Query<TResult>(Func<IQueryable<T>, TResult> query)
    {
        return query(this.collection.Linq());
    }
}

Was ich will, ist ein Griff auf GetTable () zu erhalten und dann mein Service Layer Linq Code dagegen schreiben.

Ich vermute, ich werde eine Wrapper-Schnittstelle schreiben das Äquivalent der IMongoDatabase Datenbankvariable zu erhalten.

Allerdings ist die Frage, die man oben, nicht das andere Problem. Wie ich schon sagte, lerne ich gerade hier. Kein Produktionscode wird in diesem Film verletzt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top