2016-09-27 4 views
2

Ich versuche zu versuchen (mit Moq) DbSet im DbContext in einem vorhandenen Projekt, das ich glaube, von VS 2012 aktualisiert wurde. Ich bekomme einen Fehler und es ist, weil diese DbSet <> 's sind nicht als virtuell markiert, so dass sie nicht verspottet werden können. Wenn ich mir neuere Projekte anschaue, die ich gemacht habe, werden sie als virtuell markiert.Entitätstypen sind nicht virtuell in vorhandenen Projekt markiert

Da dies in der .edmx-Datei ist, kann ich den Code nicht einfach virtuell hinzufügen, da er automatisch generiert wird. Kennt jemand irgendwelche Eigenschaften, die ich einstellen kann, um sie virtuell zu machen?

+0

Welche Version von EF verwenden Sie? – kiziu

+0

Es ist EF Version 6. – user441521

Antwort

4

In EF6 werden standardmäßig DBSet Mitglieder als virtual erstellt. Dies kann nicht von der Konfiguration aus geändert werden, aber T4-Vorlage (.tt Datei) muss bearbeitet werden. Sehr wahrscheinlich hat jemand es vorher bearbeitet und das Schlüsselwort virtual entfernt.

Um Ihre T4-Vorlage zu finden, erweitern Sie die Struktur, die von der Datei .edmx im Projektmappen-Explorer erstellt wurde. Sie werden eine .tt Datei darin finden.

Um Ihre DBSet s virtual wieder zu machen, müssen Sie string DbSet(EntitySet entitySet) ein Verfahren finden (in Standard .tt, es ist Linie 307). Diese Methode erstellt eine Eigenschaftsdeklaration und Sie können hier ihr Muster ändern. Standardmäßig wird

"{0} virtual DbSet<{1}> {2} {{ get; set; }}" 

verwendet. Finden Sie Ihre Version dieses Musters und ändern Sie es nach Ihren Wünschen (oder einfach eine Standardversion, die ich zur Verfügung gestellt habe).

EDIT: Wenn Sie diese Methode nicht leicht finden können, versuchen Sie für die Suche

DbSet <

EDIT: Nach dem Bearbeiten und Speichern .tt Datei, sollte es automatisch ausgeführt werden. Falls nicht, klicken Sie mit der rechten Maustaste darauf und wählen Sie "Benutzerdefiniertes Tool ausführen".

+0

Perfekt danke! – user441521

Verwandte Themen