2010-02-11 15 views
7

Necesito almacenar entidades localizadas en una base de datos (por ejemplo, un Producto, que tiene un Nombre, que es diferente en inglés y en danés). Hay varias formas bien conocidas de hacerlo, por ejemplo, tener algún tipo de tabla de recursos que contenga los valores de las columnas localizadas.¿Algun ORM de .NET admite entidades localizadas listas para usar?

Sin embargo, esto no parece ser muy fácil de encajar en un ORM, cuando quiero recuperar una instancia de la clase Product en el idioma inglés y espero que el valor de la propiedad Name sea el inglés.

No quiero reinventar la rueda, y creo que este es un problema que debe ser muy común. ¿Hay alguna localización de entidad de soporte ORM lista para usar?

Dado que estoy en la pila de Microsoft, y la opción obvia para un ORM sería Entity Framework 4. ¿Hay alguna característica en EF4 que lo soporte?

Respuesta

9

yo sepa EF4 no proporciona nada como esto.

Dmitri Maximov ha escrito una buena serie de post de aplicación de localización para DataObjects.Net, la información no puede ser de ayuda para usted, incluso si usted está utilizando (o el que utilizara) cualquier otro marco:

0

Quizás tenga que buscar más, utilizaría NHibernate, y un interceptor para capturar la carga de una entidad y hacer la localización de la entidad, en función de la cultura actual de la aplicación y de alguna forma de almacenar las cadenas localizadas .

Algunos recursos:

http://elegantcode.com/2008/05/15/implementing-nhibernate-interceptors/

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

+0

Es solo una parte del problema. –

1

Tengo el mismo problema (localizar contenido, MS stack, ORM ...) y por el momento voy con las tablas Resource/ResourceValue. Uso Linq-to-SQL con PLINQO templates que he ajustado ligeramente para generar propiedades auto localizadas en mis entidades.

La plantilla detecta claves externas en la tabla de recursos y crea una columna adecuada.

Por ejemplo, si tengo una Product Table con una columna int NameID FK, creará una propiedad string Name en mi clase Product devolviendo el valor apropiado según la cultura actual de Thread.

Las desventajas son:

  • complejidad para las inserciones/actualizaciones (debe jugar con 3 mesas, pero Linq2Sql hacen no es tan difícil)
  • tablas de navegación por administración de SQL es doloroso ya que las columnas de texto son simplemente extranjera claves

Me pareció que esta pregunta se ocupaba de una solución de "mejores prácticas", pero aún no he encontrado una.

+0

Gracias por su aporte. FYI, fuimos con tablas de recursos también, pero muy almacenadas en caché para obtener el rendimiento que necesitábamos. Esto agrega cierta complejidad, que hubiera preferido prescindir. – driis

Cuestiones relacionadas