2009-11-03 7 views
10

Ich habe ein Szenario, wo ich lokalisierte Werte von Objekten in meiner Datenbank benötigen.Lokalisierte Tabellen und Entity Framework

Nehmen wir an, Sie haben eine Anwendung, die Tiere erstellen kann, wenn der Benutzer Englisch ist, würde der Wert der Eigenschaft "Name" eines Tieres als "Katze" in der Benutzeroberfläche eingegeben werden, während es als "Chat" eingegeben würde auf Französisch.

Die Tierkulturtabelle würde 2 Datensätze enthalten, die auf dasselbe Tier in der Elterntabelle verweisen.

Wenn Werte zurückgelesen werden, wenn der Wert von "Name" in der Benutzerkultur nicht existiert, wird der Standardwert (Wert, mit dem das Objekt ursprünglich erstellt wurde) verwendet. Die folgenden Diagramme zeigen, wie die Daten in SQL gespeichert ist:

alt text

Ich versuche, dieses Schema zu einem Objektmodell abzubilden, die Entity Framework verwenden, bin ich ein wenig verwirrt, was die beste Möglichkeit, das Problem anzugehen.

Ist EF dafür geeignet? Sollte ich EF4 verwenden?

Dieses EF-Modell wird von .NET RIA Services verwendet.

Danke,

Pierre-Yves Troel

+2

Haben Sie mehrere Sprachen erscheinen in der Anwendung zur gleichen Zeit, oder wäre es nur eine einzige Sprache zu einer Zeit haben müssen? –

+0

Was ist die Beziehung zwischen Ihrer Frage und der "AD", die Sie am Ende setzen? Wie auch immer, schaut euch diese Frage hier an http://stackoverflow.com/questions/2272026 –

Antwort

-1

Ich bin nicht sicher, Sie dies in der Datenbank tun wollen würde. Ich denke, es wäre sinnvoller, eine Konfigurationsdatei oder Ressource zu verwenden, die kulturspezifische Namen definiert.

Sie können auch die Microsoft-Dokumentation unter internationalization and localization überprüfen.

+0

Einverstanden. Dies ist der richtige Weg, iot zu tun. –

+7

Ressourcen sind mehr für statische Werte als für dynamische reserviert, wie in diesem Fall. Animal ist eine Definition einer Entität, von der Sie nicht wissen, wie viele Werte (Instanzen) es haben wird. In diesem Fall ist der bessere Ansatz (nicht der einzige) der Vorschlag von Pyttroll – Lester

+1

Vor langer Zeit aber Sie "müssen" eine Datenbank für Benutzer/Admin generierten Inhalt verwenden. In Bezug auf die Generierung sind Ressourcendateien nur für die Vorproduktion geeignet, da sie kompiliert werden müssen. Sie könnten versuchen, sie dynamisch zu generieren, aber dann kommen Sie in Locking-Probleme und eine ganze Reihe von Problemen, die bereits von einem DBMS gelöst wurden. – rism

4

Was ich in einer ähnlichen Situation gemacht habe, ist eine Ansicht say LocalizedAnimals erstellt, die eine flache Darstellung dieser 2 Tabellenstruktur ist und ein EF-Modell für diese Ansicht erstellt. Wenn ich französische Tierdaten anzeigen möchte, würde ich diese LocalizedAnimals filtern und als Ergebnis eine schöne einfache Objektliste haben.

Etwas wie folgt aus:

var localizedAnimals = myContext.LocalizedAnimals.Where(
          p => p.CultureName == Thread.CurrentThread.CurrentUICulture.Name 
         );