2009-11-03 17 views
10

Tengo un escenario en el que necesito valores localizados de objetos en mi base de datos.Tablas localizadas y Entity Framework

Digamos que tiene una aplicación que puede crear animales, si el usuario es inglés, el valor de la propiedad "Nombre" de un animal se ingresará como "Gato" en la interfaz de usuario mientras que se ingresará como "Chat" en francés.

La tabla de la cultura animal contendría 2 registros que apuntan al mismo animal en la tabla padre.

Al volver a leer los valores, si el valor de "Nombre" no existe en la cultura del usuario, se usará el valor predeterminado (valor con el que el objeto se creó originalmente). Los siguientes diagramas muestran cómo se almacenan los datos en SQL:

alt text

estoy tratando de asignar este esquema a un modelo de objetos utilizando el marco de la entidad, que estoy un poco confundido en cuanto a cuál es la mejor forma de abordar el problema.

¿Es adecuado EF para esto? ¿Debo usar EF4?

Este modelo EF será utilizado por .NET RIA Services.

Gracias,

Pierre-Yves Troel

+2

¿Es necesario tener múltiples idiomas aparecen en la aplicación al mismo tiempo, o sería sólo un único idioma a la vez? –

+0

¿Cuál es la relación entre su pregunta y el "AD" que puso al final? De todos modos, mira esta pregunta aquí http://stackoverflow.com/questions/2272026 –

Respuesta

-1

No estoy seguro de que quiere hacer esto en la base de datos. Creo que sería más sensato usar un archivo de configuración o recurso que defina nombres específicos de Cultura.

También puede consultar la documentación de Microsoft en internationalization and localization.

+0

de acuerdo. Esta es la forma correcta de hacer iot. –

+7

Los recursos están más dedicados a almacenar valores estáticos que dinámicos, como en este caso. Animal es una definición de una entidad que usted no sabe cuántos valores (instancias) tendrá. En este caso, el mejor enfoque (no el único) es el sugerido por Pyttroll – Lester

+1

Hace mucho tiempo pero "tienes" que usar una base de datos para el contenido generado por usuarios/administradores. En términos de generación, los archivos de recursos solo son de preproducción porque requieren compilación. Podría intentar generarlos dinámicamente, pero luego obtendrá problemas de bloqueo y una gran cantidad de problemas que ya ha resuelto un DBMS. – rism

4

Lo que hice en una situación similar es crear una vista decir LocalizedAnimals que es una representación plana de esa estructura de 2 tablas y creó un modelo EF para esa vista. Entonces, cuando necesite mostrar los datos de animales franceses, filtraré esos animales localizados y tendré una buena lista de objetos simples como resultado.

Algo como esto:

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