Also, da Sie meinen Kommentar mochte ich erweitern. Lassen Sie uns sagen, ich habe Tabellen
Foo
FooId int
Desc varchar(32)
Bar
BarId int
Desc varchar(32)
nun eigentlich viel mehr und sagen 50 Tische habe ich so tun lassen. Ich würde das alles nicht mit der Hand machen wollen, da es irgendwie verrückt wäre. Zurück in den Tag mit ADO.NET würden Sie DataTables erstellen und möglicherweise gut geformte Objekte handcraft. Nun, mit Linq To SQL haben sie ein Dokument erstellt, das den Großteil der Modellierung für Sie übernimmt, aber es war ziemlich beschränkt auf fast identisch mit dem, wie die Datenbank aussah. Aber mit Entity Framework hat MS einen Schritt weiter gegangen. Jetzt haben Sie eine Datenbankschicht, eine Zwischenschicht und eine Objektschicht. Es genügt zu sagen, dass Sie sogar Objekte manipulieren und erstellen können, die über Ihren "Kontext" hinausgehen.
Aber all das beiseite sagen wir erstellen ein Entity Framework 6.1.3 Modell und wählen Sie meine Datenbank und wählen Sie Datenbank zuerst.Ich erhalte eine Modelldarstellung, indem ich Objekte hinzufüge und sie unter einem Kontext für mich gespeichert werden. Soweit es EF betrifft, sind diese Objekte die Tabellen. Sie tun nur so etwas wie
using(var context = new DBContext())
{
var newFoo = new Foo { Id = 1, Desc = "A" };
context.Foo.Add(newFood);
context.SaveChanges();
}
ich gerade hinzugefügt und ein neues Foo-Objekt gespeichert und ich musste nicht jeder Code Erstellung eines POCO Objekt zu tun. EF hat das für mich getan, als ich das benutzerdefinierte Werkzeug ausführte, indem ich das Modellobjekt anwählte und mit der rechten Maustaste klickte und "Benutzerdefiniertes Werkzeug ausführen" auswählte. Im Wesentlichen werden hier nur die Daten ausgeführt, um die POCOs und Einstellungen für Sie zu generieren. Oder Code schreiben Code in der T4. Sie können das T4 aktualisieren, um Einstellungen zu ändern, aber ich empfehle nicht, zu verrückt zu werden.
Die Methode, die Sie bereits gehen, ist besser. Einfach den Code in neue Methoden einbinden und schon hast du ein Repository. Der Vorteil eines Repositories, das EF-Kontexte direkt in die Hand gibt, ist, dass Sie Technologien mischen oder nach Bedarf ändern können. Das einzige, was ich sagen würde, wäre, die Objekte, die Sie verwenden, als das zu behalten, was die EF oder andere Technologie erzeugt. Oder vielleicht haben Sie eine Geschäftslogik mit Eigenschaften, die automatisch aufgerufen werden, und Sie möchten nicht, dass sie Ihre EF verschmutzen, aber in einem Repomuster sind sie in Ordnung. Repository-Muster IMHO sollte nur ein Vermittler für Ihre CRUD-Operationen sein, die zwischen einer Retrieval-Technologie und einem Anrufteil liegen.
Was bedeutet es, eine SQL-Tabelle "als Objekt" zu verwenden? Willst du damit sagen, dass sie 'DataTable' statt einer POCO-Klasse oder EF benutzen? Wenn ja, nein, das ist keine sehr gute Übung. Der Vorteil ist, dass der Typ, der den Code geschrieben hat, anfing, mehr Zeit mit Anime zu verbringen, anstatt seinen Job zu machen. Die Nachteile sind, dass Sie diese undurchsichtige Kugel des Schmirgels haben, die störend und fehleranfällig ist, anstelle von einer stark getippten Klasse, die einfach zu verwenden ist. –
Sorry für die schlechte Beschreibung, lassen Sie mich es mit detaillierteren Informationen umformulieren. Zuerst benutzen sie LinQ-To-Sql (dbml-Datei), es gibt eine Tabelle "foos", sagen wir, sie hat eine String-Eigenschaft "name". Normalerweise würde ich fortfahren und eine Klasse 'foo' erstellen, die einen Prop-Namen vom Typ string hat und sie entlang der App benutzen und dann die DBContext.Foos aufrufen und mein Objekt "foo" hinein einfügen. Aber sie verwenden Foos (die Tabelle) überall in der App, als Rückgabetyp für Funktionen, Liste und so weiter, so dass sie die Tabelle direkt verwenden, wie Sie ein Klassenobjekt verwenden würden. Habe das nie gesehen und habe meine Zweifel daran –
* "Aber sie benutzen Foos (den Tisch) überall in der App" * - nein, sind sie nicht. Das ist eine SQL-Tabelle. Die Anwendung ist in C#. Sag mir, was sie eigentlich machen. Was ist 'Foo' in ihrem Code? Was ist die eigentliche Sache? Was ist der Typ? Was ist die Klasse? Wer hat es definiert? Sie importieren die DB nicht einfach in .NET; Das ist Code, der irgendwo herkommt. –