2012-08-10 6 views
5

Ich bin neu in MVC und neu in der Verwendung von EF. In unserer Anwendung verwenden wir den ersten Ansatz der Datenbank. Da wir den DB-Ansatz verwenden, erzeugen wir edmx von der db.Verwenden von Database ersten Ansatz in Entity Framework

Wenn ich das EDMX erzeuge, generiert es alle zugehörigen Klassen für die Tabellen in meiner Datenbank. Hier verwechsle ich nur sehr viel, ob ich die generierten Klassen in meinen Ansichten direkt verwenden soll oder ob ich eine weitere Ebene von Klassen über die generierte Klasse erstellen und sie von meinen Controllern und Ansichten verwenden soll.

Wenn ich eine weitere Schicht von Klassen über Entitäten erzeuge, muss ich mich um das Mapping in diesen Klassen kümmern. Ich bezweifle, dass das in Zukunft ein Schmerz sein könnte, wenn sich das Modell ändert.

Wenn ich die Entitäten von meinen Controllern direkt verwende, habe ich das Gefühl, dass ich alle unnötigen Dinge den Controllern und Ansichten aussetze.

Kann mir bitte jemand empfehlen, wie ich weiter vorgehen soll?

Antwort

3

Sie machen es gut, wie Sie es haben, brauchen Sie nicht, es zu ändern. Sie sollten in der Lage sein, die generierten Klassen zu verwenden, oder wenn Sie der Meinung sind, dass Sie zu viel aufdecken, können Sie ein Ansichtsmodell erstellen, das nur die Daten enthält, die Ihnen wichtig sind, und diese an die Ansicht übergeben. So soll MVC funktionieren.

Sagen Sie bitte eine Datenbanktabelle Articles genannt haben, und es gibt eine Menge Sachen, dass Sie nicht der Ansicht passieren Sie wan't, könnten Sie ein Ansichtsmodell wie dieses

public class ArticlesViewModel 
{ 
    [Required] // this is optional, just to give you an idea of validation 
    public string Title { get; set; } 
    public DataTime Date { get; set; } 
} 

erstellen jetzt in Ihrem Controller, den Sie so etwas wie dieses haben würde:

ArticlesViewModel articleVM = new ArticlesViewModel(); 
// populate it from your DB 

return View(articleVM); 

so, jetzt nur die Ansicht der Title und Date hat (Sie sollten auch haben ID so können Sie die volleabrufenvon der DB leicht.)

This wird Ihnen eine Vorstellung davon geben, nur die benötigten Informationen aus Ihrer DB zu greifen.

+0

Also abgesehen von der Articles-Klasse haben Sie die ArtsViewModel-Klasse und Sie legen die Model-Klasse zur Ansicht offen. Und zu dem Zeitpunkt, zu dem die Daten im ersten Schritt abgerufen werden, erhalten Sie Artikel und von Artikeln werden Sie ArticlesViewModel abrufen. Bitte korrigieren Sie mich, wenn ich falsch liege. – Naresh

+0

Ja, schauen Sie sich die 'AccountModels.cs' in einer Standard-MVC3-App an. Diese setzen nur die Informationen frei, die der Benutzer sehen und ändern kann. Dann aktualisiert es auf einem Post die 'Membership' (ich denke) Tabelle. Mitgliedschaft enthält viel mehr Eigenschaften als nur Benutzername, Passwort, etc. Hoffe, dass hilft. Siehe http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-model –

2

Wahrscheinlich möchten Sie mit NuGet eines der POCO-Objekte (einfache alte C# -Objekte - Objekte, die keine Abhängigkeiten zu anderen Funktionen wie EF haben) installieren, damit Sie Ihre Objekte ohne den View-Layer an den View-Layer übergeben können erfordert Kenntnisse von EF überhaupt.

Dies nennt man "Separation of Concern" oder "Single-Responsibility-Prinzip" - Ihre Views wissen, wie man Daten anzeigt, Ihre DAL weiß, wie man Daten abruft und speichert, und keiner sollte die intimen Details wissen der andere Job.

Wenn Sie EF-Objekte in der Kette übergeben, müssen Sie auch die EF-Kenntnisse und -Fähigkeiten in der Kette weitergeben - POCOs werden dabei umgangen.

Werfen Sie einen Blick auf dieses Thema SO:

Entity Framework 4/POCO - Where to start?

+0

In meinem Wissen verwenden wir POCO im Falle von Code First Ansatz. Bitte korrigieren Sie mich, wenn ich falsch liege. – Naresh

+0

Durch die Installation eines POCO-Generators können Sie POCOs in Database First-Projekten verwenden - ich habe mehrere große Projekte auf diese Weise gemacht. – Moo

+2

Ist der DBContext-Generator EF4.x dem POCO-Generator ähnlich? – Naresh

Verwandte Themen