Pergunta

Eu realmente não sabia como formular o título. Mas este é o meu problema. Estamos usando SqlCacheDependencies para atualizar o cache de objetos. Mas a consulta por trás disso é "complicada" que gostaria de torná-lo um pouco mais fácil.

O nosso primeiro pensamento foi para adicionar um nome do campo como DateChanged e usar o DateChanged para verificar se um objeto realmente mudou em vez de colocar todas as colunas de uma tabela.

SELECT DateChanged FROM Table1

em vez de

SELECT Id, Title, DateChanged, Description FROM Table1

Mas eu estava esperando que alguém poderia me dizer se há outras maneiras de fazer isso ou se existem padrões para nomear a coluna que indica uma mudança. Como são frameworks como "quadro Entity" ou "NHibernate" lidar com isso?

Foi útil?

Solução

É geralmente chamado de "timestamp"

ou seja,

Outras dicas

Estas são as colunas que eu uso em entidades "auditáveis":

version: hibernate's optimistic concurrency control
createdBy: FK to users
modifiedBy: FK to users
createdAt: timestamp
modifiedAt: timestamp

Se você estiver em SQL Server ser conscientes de uma coluna timestamp é um pouco enganosamente chamado. Enquanto ele pode ser usado para rastrear alterações em uma coluna, o seu valor não tem nada a ver com a data ou hora. Ele pode ser pensado como uma uniqiue ID no banco de dados, nada mais. http://msdn.microsoft.com/en-us/library/aa260631. aspx

A fim de saber se a mudança ocorreu você precisa de duas timstamps, como em resposta de cherouvim. Um é definido quando um objeto é criado, o outro em qualquer modificação, provavelmente através de disparador de atualização. Se eles diferem em seguida, o objeto foi editado, mas você não pode dizer exatamente quando.

No SQL Server você tem que usar o mesmo padrão, mas com data e hora colunas. Você pode então calcular a data da linha subtraindo a data de criação a partir da data da modificação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top