非常に基本的なSqlCacheDependencyプロトタイプの実装に問題があります。SqlCommandが動作しないSqlCacheDependency
これをsprocで試しましたが、今はまっすぐなコマンド実行になっています。
public SqlCommand GetReadCommand(int ID)
{
SqlCommand cmd = new SqlCommand("SELECT dbo.Entity.Entity_ID, dbo.Entity.Name FROM dbo.Entity WHERE Entity_ID = @ID", _conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("ID", ID));
return cmd;
}
public SqlCacheDependency GetSqlDependency(int ID)
{
SqlCommand cmd = GetReadCommand(ID);
SqlCacheDependency dep = new SqlCacheDependency(cmd);
return dep;
}
そして、私はすべてのオブジェクトのデータセットを読んで、私は手動で挿入いくつかのデータの非常に単純な依存関係のテストを作成しています:
public DataSet SelectAll()
{
DataSet result;
if (_cache["Entity_FullSet"] == null)
{
SqlCommand cmd = new SqlCommand("dbo.GetAllEntities", _conn);
cmd.CommandType = CommandType.StoredProcedure;
_conn.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
result = new DataSet();
da.Fill(result);
_cache[MasterCacheKey()] = DateTime.Now;
string[] mk = new[] { MasterCacheKey() };
CacheDependency cd = new CacheDependency(null, mk);
SqlCacheDependency scd = new SqlCacheDependency(GetReadCommand(1));
CacheDependency[] cds = new[] { cd, scd };
AggregateCacheDependency acd = new AggregateCacheDependency();
acd.Add(acd);
_cache.Insert("Entity_FullSet", result, scd);
_conn.Close();
}
else
{
result = (DataSet)_cache["Entity_FullSet"];
}
return result;
}
「マスターキー」は、集約キャッシュの依存関係をテストするためにそこにあります - それは素晴らしい作品を変更するが、1(変数scd)にSQLの依存関係は単に動作していません。行を削除しても何も起こらない場合、キャッシュはクリアされません。
SQLの依存関係が/発火を登録していない理由として任意のアイデアをいただければ幸いです!
私はこれらのことを設定していませんでした。多分私は何かが分かりませんでしたが、私はクラスのドキュメントの読んで、私はそのデータベースの変更ステートメントを思い出しません。それを今試みている。 –
Oh - WRT sproc - これは間違いだと私は思っています。最初はsprocsだと思っていましたが、直接SQL文で試してみましたが、まだ喜んでいませんでした。 –
ありがとう、それは単純なことの組み合わせに加えて私は同じcmdに実行される私の依存関係が必要です。 –