2010-07-02 39 views
16

Alguien ha implementado un generador de claves Hilo para el marco de la entidad.Hilo para el Entity Framework

Lea más sobre HiLo aquí: Le recomiendo que lea http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html para obtener una explicación detallada de los inconvenientes de elegir identidad.

+1

si está utilizando SQL Server, tenga en cuenta el tipo de datos uniqueidentifier añadido a SQL Server. –

+0

¿Cuál es exactamente tu pregunta? – Crisfole

Respuesta

0

IMO Entity framework no tiene ningún equivalente a los generadores de NHibernate. La única característica disponible en EF es StoreGeneratedPattern que se puede establecer en Identity. StoreGeneratedPattern simplemente significa que DB asignará una clave y la clave se devuelve como parte de la operación de inserción al contexto EF (más difícil con Guids).

Si quiere tener un equivalente del generador de POER NHibernate, tiene que anular SaveChanges o manejar SavingChanges en su ObjectContext. Luego puede asignar manualmente ID a todas las entidades insertadas desde el algoritmo POID de su elección, pero debe implementar el algoritmo.

1

Desafortunadamente, EF no tiene nada muy cerca de los generadores POID como lo hace NHibernate, aunque escucho rumores de que se incluirán capacidades similares en el próximo lanzamiento de EF. (¿Qué?!? Microsoft cooptando la buena idea de un competidor?)

No sería demasiado difícil manejar la parte Lo de HiLo nosotros mismos, pero la parte Hi sería complicada a menos que pudiéramos obtener EF cooperar. Eso llevaría a Microsoft a refactorizar partes de EF, que es probablemente la razón por la cual nadie ha intentado hacerlo y publicarlo como un proyecto de código abierto en github o codeplex.

Mientras tanto, lo que hemos usado para generar registros fuera de línea y luego sincronizarlo en un momento posterior es el identificador global único.

var id = Guid.NewGuid(); 

Asignándolo a la id de la tabla. Esto se puede hacer en SaveChanges.

Sé que no es tan bueno como HiLo pero está tan cerca como hemos llegado. Todavía tiene las ventajas de poder trabajar fuera de línea y garantizar ids únicos y válidos.

2

Gracias por las respuestas

Creo que sólo tengo que esperar :-) La EF se está moviendo en la dirección correcta encanta la CTP5.

Necesito hacer comentarios sobre la respuesta de "Rap". Usar índices aleatorios de Guid como realmente puede ralentizar el rendimiento en SQL Server porque los índices de cada inserción se fragmentan. Esto aprendí del mundo real, cuando comencé a trabajar en una nueva empresa que tenía grandes problemas de rendimiento en servidores sql allí. pasar de guid a bigint resolvió el problema. y no hubo necesidad de reindexar todo el tiempo.

+0

Sí, eso es cierto. Buena llamada, @martin. Solo decía que, dado que EF aún no está allí, eso es todo lo que tenemos disponible a partir de ahora. – Rap