2011-03-17 12 views
10

Estoy interesado en cuál es la mejor manera para StoreGeneratedPattern.¿Cuál es el enfoque de generación de identidad recomendado en el marco de la Entidad?

En el pasado yo estaba acostumbrado a dejar que el DB generar el ID para mí, pero me preguntaba si hay alguna ventaja en el establecimiento de

StoreGeneratedPattern = None 

en lugar de

StoreGeneratedPattern = Identity 

ni siquiera estoy seguro de qué sucede cuando lo configuro en Calculado.

¿Alguna recomendación? ¿Hay algún buen artículo relacionado con esto porque msdn no es muy explicativo? Estoy usando sobre todo ints con pocos GUID en mi esquema.

Respuesta

20

Compruebe mi blog post sobre StoreGeneratedPattern. Explica algunas diferencias entre Identity y Computed. Al usar StoreGeneratedPattern para ID (PK), la opción correcta es None si asigna ID en la aplicación o Identity si asigna ID en DB. La opción Computed es "inválida" porque esta opción se usa cuando se cambia el valor durante la persistencia de cada entidad (también en las actualizaciones) y no es el caso de la ID.

La diferencia entre Identity y Computed es el comportamiento del comando SQL ejecutado. Si la propiedad es Identity, EF seleccionará el valor después de Insertar y lo devolverá a su aplicación. Si la propiedad es Computed EF seleccionará el valor después de Insertar y Actualizar y devolverlo a su aplicación.

Editar:

StoreGeneratedPattern.Identity no está relacionado con la identidad en DB. No necesita tener Identidad en DB y puede establecer ID con un techinque diferente (valor predeterminado para guid o trigger) pero aún necesita StoreGeneratedPattern.Identity para recuperar el valor de su aplicación.

Una vez que esté usando Identity o Computed EF siempre seguirá cada Insertar o Actualizar con Seleccionar para las columnas generadas por db. No puede funcionar sin eso. Estos comandos se ejecutan en un solo viaje de ida y vuelta a la base de datos por lo que casi no hay impacto en el rendimiento.

+0

gracias, esto en su mayoría responde a mi pregunta. Todavía hay UN dilema más. Puedo establecer la columna de id en db para que no sea identidad, pero sigo siendo una clave principal. En este caso, EF generará una nueva identificación para mí. ¿Cómo funciona? Dos consultas sql? ¿Es eficiente? No tengo perfilador. Gracias – Marek

Cuestiones relacionadas