12

Lets Standard ASP.NET MVC-Anwendung Ordnerstruktur betrachten, es ist so sieht wie folgt aus:Wohin mit Entity Framework-Datenmodell in MVC-Anwendung?

-App_data 
-Content 
-Controllers 
    HomeController.cs 
-Models 
    AccountModels.cs 
-Scripts 
-Views 

Meine Frage ist: Wo ist der beste Ort, Entity Framework-Datenmodell (EDMX-Datei) setzen? Ist es Modellordner? Ja - wir wissen, dass eine gute Lösung darin besteht, ein neues Projekt einzuführen und es auf die MVC-Anwendung zu verweisen, aber vergessen wir das jetzt.

+1

** WARUM ** möchten Sie die richtige Lösung vorne - von all dem Zeug in eine separate Montage setzen ?? Es ist der beste und sauberste Ansatz - ** nutze es! ** –

Antwort

17

Für ein kleines Projekt sollte es Teil des Modells sein. Bei einem größeren Produkt könnten sich das Repository und das zugehörige Modell in einer separaten Assembly befinden.

6

Nun, das ist umstritten, aber ich würde +1 für die Modelle Ordner wählen.

Der einzige andere Kandidat wäre App_Data, aber dies ist in der Regel für dateibasierte Datenbanken (zum Beispiel SQL Server CE. MDF) und Dateien, die nicht von IIS bedient werden sollen.

Als EDMX ist eine Abstraktion der Datenbank, sollte es in den Modelle Ordner gehen.

Wenn das Projekt größer wird, sollten Sie Ihr EF-Modell definitiv in ein anderes Projekt verschieben. Um sich selbst davon zu überzeugen, sollten Sie Ihren Controllern über Repository/Interfaces Zugriff auf das EDMX geben. Wenn Sie also das DAL in ein anderes Projekt verschieben, müssen Sie lediglich den Verweis hinzufügen und die using-Anweisungen hinzufügen.

0

Meine Meinung ist, dass Sie

  1. ein separates Projekt für Domänenobjekte, Datacontracts usw. usw ... Wie MyProject.Infrastructure darunter viele Ordner wie Datacontracts erstellen sollten, Modell, Ausnahmen usw.
  2. ein separates Projekt für Data Access wich enthält die DBContexts und die Repositorys, auf diese Weise Sie später leicht Migrationen verwalten können auf
+0

Sind zwei separate Projekte wirklich notwendig? Warum nicht Domänenklassen und Datenzugriffsklassen in einem Projekt hinzufügen? Wenn Sie viele verschiedene Backend-Datenspeicher haben, möglicherweise nicht-relationale, dann sind separate Projekte für Domänenklassen und Datenzugriff sinnvoll. –

1

ich das EF-Modell setzen würde (auch bekannt als physikalisches Modell) al Arten in seiner eigenen Versammlung oder in einer "Kern" Versammlung außerhalb der Haupt-MVC-Anwendung. Gleiches gilt für Ihre Business-Logik/Domain-Logik/Domain-Services/etc. Trennen Sie die Nicht-Web-Sachen von der MVC-Web-Anwendung.

Dadurch können Sie den Kern Ihrer App wiederverwenden. Zum Beispiel, wenn Sie es als Service, ein Befehlszeilentool, Migrations-Tool, usw. freilegen müssen.

Da die Speicherung in einer eigenen Baugruppe so einfach ist und Sie ein paar Minuten brauchen, empfehle ich Ihnen, dies zu tun jede kleine App auch.