My table has a timestamp column named ‘RowVer’ which LINQ maps to type System.Data.Linq.Binary. This data type seems useless to me because (unless I’m missing something) I can’t do things like this:
// Select all records that changed since the last time we inserted/updated. IEnumerable<UserSession> rows = db.UserSessions.Where ( usr => usr.RowVer > ???? );
So, one of the solutions I’m looking at is to add a new ‘calculated column’ called RowTrack which is defined in SQL like this:
CREATE TABLE UserSession ( RowVer timestamp NOT NULL, RowTrack AS (convert(bigint,[RowVer])), -- ... other columns ... )
This allows me to query the database like I want to:
// Select all records that changed since the last time we inserted/updated. IEnumerable<UserSession> rows = db.UserSessions.Where ( usr => usr.RowTrack > 123456 );
Is this a bad way to do things? How performant is querying on a calculated column? Is there a better work-around?
Also, I’m developing against Sql Server 2000 for ultimate backwards compatibility, but I can talk the boss into making 2005 the lowest common denominator.
Why not have two columns, one for createddate another for lastmodifieddate. I would say that is more traditional way to handle this scenario.