Ich habe viele Tabellen mit einer TextID-Spalte, die auf die Übersetzungstabelle verweist. Die Übersetzungstabelle benötigt auch LanguageID, um übersetzten Text in der gewünschten Sprache zu erhalten. Mein Problem ist, dass ich keine LanguageID in meiner Datenbank habe, es ist im System vordefiniert und ich weiß nicht, wie ich es mit Fluent API definieren kann, d. H. Das kann mein Modell sein:
%Vor%Und die Übersetzungstabelle:
%Vor%Im Grunde brauche ich Navigation wie folgt:
%Vor%Bei Verwendung von SQL würde ich es so machen:
%Vor%Grundsätzlich möchte ich den Fremdschlüssel TextID verwenden und bekomme NUR EINE Übersetzung - LanguageID ist statisch und im Kontext vordefiniert.
Ich kann das vorhandene DB-Schema nicht ändern. Es wäre perfekt, wenn ich das LanguageID-Feld nicht in meinem Code abbilden müsste, sondern einfach innerhalb des Mappings wie ein Systemparameter. Ist es überhaupt möglich mit EF?
Wenn Ihr LanguageID
statisch ist, können Sie versuchen, diesen Hack zu verwenden.
Definieren Sie Ihre Entitäten wie:
%Vor% Und fügen Sie diese fließende Zuordnung zu OnModelCreating
in Ihrer abgeleiteten DbContext
:
Der Hack basiert auf dem für das TPH-Mapping verwendeten Konzept, aber in diesem Fall verwenden Sie nur einen einzigen Entitätstyp, um nur eine Teilmenge von Datensätzen mit vordefiniertem% co_de% zu laden. Sogar FK von der Haupteinheit sollte funktionieren, weil Sie nicht Übersetzungen mit demselben LanguageId
haben können - es würde bedeuten, dass sie auch das gleiche TextId
haben, was nicht möglich ist, weil LanguageId
und TextId
Primärschlüssel bilden / p>
Ich bin mir nicht sicher, ob es in dieser Lösung ein verstecktes Problem gibt. Ich habe es nur kurz versucht und es hat funktioniert.
Auch wenn die Tabelle T_T riesig ist, sehe ich nicht, wie du das anders machen könntest (naja, zumindest die Notwendigkeit, alles irgendwo zu laden).
%Vor% Sie würden Translator.PopulateTranslator(<something to access your db>)
beim Start Ihrer Anwendung aufrufen, möglicherweise mit Rücksetzungen, wenn Benutzer Übersetzungen aktualisieren können.
Dann in Ihren Entitäten anstelle von
%Vor%hättest du
%Vor%BEARBEITEN Eine andere Möglichkeit wäre, mit resx-Dateien anstelle von db-Daten zu arbeiten, aber ich stelle mir vor, dass Sie andere Einschränkungen haben.
Tags und Links entity-framework ef-code-first entity-relationship