2010-01-08 14 views
6

Pregunta rápida Re: Implementación de RowVersion.SQL Server RowVersion

Busco incluirlo en mi siguiente base de datos (diseño de ahora) y Estoy barajando 2 formas diferentes:

fila
  1. rowversion en todas las tablas
  2. Una tabla rowversion separado que tiene el ID de la tabla como una clave externa y vinculada a ella.

nadie intentó esto? Si es así, ¿qué trampas o pro experimentaste?

Me va a utilizar LINQ para acceder a los datos usando C# 2008 y SQL Server 2008.

Gracias,

James

Respuesta

11

Si está utilizando LINQ to SQL, entonces es una buena práctica incluir una columna de marca de hora/rowversion para cada tabla de entidad, ya que esto permite a LINQ usar simultaneidad optimista muy fácilmente y resulta en un rendimiento ligeramente mejor para las actualizaciones (ya que LINQ solo tiene que consultar la columna timestamp y no tiene que comparar otras columnas para cambios) .

Así que vaya a la primera opción. La segunda opción es no arrancar, realmente.

+0

Como sospechaba ... No tiene sentido reinventar la rueda !! Gracias Sam. – Darbio

1

Asumir por RowVersion te refieres al tipo de datos timestamp (bad name).

Use una columna Rowversion en todas las tablas.

SQLServer actualiza la columna automáticamente.

nunca he usado LINQ a SQL (como mi prima SQL), pero la columna rowversion son muy útiles en las actualizaciones (concurrencia).

sólo tiene que utilizar "WHERE ID = @ ID Y rowversion = @ RV" para manejar las actualizaciones concurrentes.

¡NO use su segunda opción!

+1

A partir de SQL Server 2008, ese tipo de datos se denomina "RowVersion" (dado que el nombre TIMESTAMP era tan engañoso y confuso) –

+2

marc_s: está en lo cierto, pero Management Studio aún no lo sabe. – pkario

2

Haz tu rowversion a la tabla principal - poniéndolo en una segunda tabla y la vinculación a que reducirá el rendimiento.

Como dijo Sam anteriormente, LINQ se beneficia de tener rowversions sobre la mesa - pero no creo que vaya a trabajar con una tabla vinculada.