So unterstützen Sie mehrere Entity Framework-Modelle in derselben Lösung

.net entity-framework orm

Frage

Ich habe mit der Entwicklung einer Anwendung mit dem Entity Framework begonnen.

Ich habe einen Namespace hinzugefügt, der beispielsweise meinen gesamten Benutzerverwaltungscode MyApp.Users enthält. Dieser enthält ein Modell, das als intern für den Namespace markiert wurde und die Funktionalität nur über Schnittstellen dem Rest des Systems verfügbar macht. Das ist alles gut.

Ich möchte nun einen anderen Namespace definieren, um bestimmte Geschäftslogik zu behandeln. Ich möchte, dass es ein Modell enthält, das nur über eine andere Teilmenge des Datenbankschemas Bescheid weiß, jedoch überschneidet sich diese Teilmenge in der Tabelle Users. Wenn ich versuche, auf das zweite Modell im Hauptprojekt zuzugreifen, erhalte ich folgende Fehlermeldung:

"Ein EdmType kann nicht mehrmals CLR-Klassen zugeordnet werden."

Ich habe das Gefühl, dass sich dies nicht so verhalten sollte. Immerhin wird die Benutzertabelle von 2 verschiedenen Modellen in 2 verschiedenen Namespaces referenziert ... Woher weiß VS überhaupt, dass die Tabelle zweimal referenziert wird?

Hat jemand dieses Problem gesehen und vielleicht herausgefunden, wie ein Tisch in verschiedenen Modellen existieren kann?

Alternativ - Ist dies eine Art Entity Framework Anti-Pattern, das ich vermeiden sollte?

Akzeptierte Antwort

Um Typen in mehreren Modellen wiederverwenden zu können, müssen Sie einige in diesem Blogbeitrag beschriebene Schritte ausführen . Wie viele erweiterte Entity Framework-Funktionen funktioniert dies, aber mit dem GUI-Designer nicht so gut. Weitere Informationen zum Umgang mit größeren Modellen finden Sie in diesem Intro-Beitrag .


Beliebte Antwort

Sie können definitiv mehrere Modelle haben - aber sie können sich nicht überlappen . Die Fehlermeldung ist ziemlich klar - wenn EF sich überlappen würde, wie würde EF wissen, zu welchem CLR-Typ sie zugeordnet werden soll?

In Ihrem Fall könnten Sie möglicherweise versuchen, die Tabelle Users in ein eigenes, drittes Modell zu extrahieren, wenn sie auch an zwei anderen Stellen verwendet werden muss.

Marc



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum