私はセッション変数を使用する代わりに見つけようとしています。私のソリューションでは、ASP.NET Webアプリケーションとコンソールアプリケーションによって参照されるプロジェクトがあります。これらのアプリケーションはどちらもデータに変更を加えることができ、変更が行われると、変更を行ったユーザーのIDがその行に対して記録されます。セッション変数の代わりに
ASP.NETアプリケーションが変更を加えただけの場合は、myObj.LastUpdatedByID = Session["userid"]
のような処理を行うことができます。コマンドラインアプリケーションでセッションを変更する必要がある場合、ASP.NETのセッションスコープに相当するものを使用できますが、コンソールアプリケーションスコープでも使用できます。
私はMemoryCacheを見てきましたが、これはASP.NETのアプリケーションレベルのようです。
私は、各通話にユーザーIDを渡す行を下ろうとしません。
HttpContextをチェックするようなことをして、もしあれば、セッションから引き出し、そうでなければ、MemoryCahceから引き出すでしょうか?それとももっと良い方法がありますか?
編集: ユーザーIDは、実行されている操作に応じて、コンソールアプリケーションで特に設定されます。コンソールアプリは自動化されたプロセスに使用され、実行するアクションは数多くあります。例えば、送信電子メールプロセスはユーザーID 1によって実行され、古いファイルプロセスの削除はユーザーID 2によって実行されます。一部のインスタンスでは、ユーザーIDは最後に作成されたユーザーIDに設定されますその行のデータへの変更。
編集: いくつかのコード例(簡潔にするために削除されています)。そして、あなたが使用することはできませんデータがアプリケーション間で統一する必要がある場合
public class Base(
{
private int auditID = -1;
public int AuditID
{
get
{
if (this.auditID <= 0)
{
ObjectCache memCache = MemoryCache.Default;
this.auditID = ((int)memCache["CurrentUserID"]);
}
return this.auditID;
}
}
}
public class MyObject : Base
{
public int LastUpdatedByID { get; set; } = 0;
public bool Save()
{
bool b = false;
this.LastUpdatedByID = this.AuditID;
//Call to DB here...
return b;
}
}
のようないくつかのデータベースのような永続的なデータストアまたは分散キャッシュにデータを格納するだろうか? – CodeCaster
@CodeCaster編集を追加しました – TechyGypo
オブジェクトを更新するコードを表示します。クラスライブラリはSystem.Webを参照すべきではありません。 – CodeCaster