You need a CacheItemPolicy per cache item, so your code should look more like:
var cache = MemoryCache.Default;
var firstObject = cache["firstObject"] as string;
if (firstObject == null)
{
var cmd = new SqlCommand("SELECT * FROM Table1");
firstObject = GetFirstObject(cmd);
var policy = new CacheItemPolicy();
policy.ChangeMonitors.Add(new SqlChangeMonitor(new SqlDependency(cmd, null, 600)));
cache.Add("firstObject", firstObject, policy);
}
var secondObject = cache["secondObject"] as string;
if (secondObject == null)
{
var cmd = new SqlCommand("SELECT * FORM Table2");
secondObject = GetSecondObject(cmd);
var policy = new CacheItemPolicy();
policy.ChangeMonitors.Add(new SqlChangeMonitor(new SqlDependency(cmd, null, 600)));
cache.Add("secondObject", secondObject, policy);
}
In addition, I think you will find that to use a SqlDependency you cannot use * in the select and you must specify owner on the table. So
SELECT * FROM Table1
becomes
SELECT Column1, Column1 FROM dbo.Table1
See here for more details
Hope this helps