我有一個正在寫入sql server數據庫的C#.net應用程序。 SQL Server表都具有通用的記錄管理列(DateCreated,DateLastUpdated,CreatedUserId等),我希望將這些字段的總體抽象爲InsertFilter和UpdateFilter。ServiceStack:在InsertFilter和UpdateFilter中訪問會話
這裏的APPHOST的配置方法的削減版本..
public override void Configure(Container container)
{
ICacheClient CacheClient = new MemoryCacheClient();
container.Register(CacheClient);
var connectionString = ConfigurationManager.ConnectionStrings["mydb"].ConnectionString;
container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));
container.Register<IUserAuthRepository>(c => new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));
var authRepo = (OrmLiteAuthRepository)container.Resolve<IUserAuthRepository>();
OrmLiteConfig.InsertFilter = (dbCmd, row) =>
{
var userSession = SessionFeature.GetOrCreateSession<AuthUserSession>(CacheClient);
var recordManagementRow = row as IRecordManagement;
if (recordManagementRow != null)
{
recordManagementRow.DateCreated = recordManagementRow.DateLastUpdated = DateTime.UtcNow;
if (userSession != null)
recordManagementRow.CreatedUserId = recordManagementRow.LastUpdatedUserId = userSession.Id.ToInt();
}
};
}
在執行我上OrmLiteConfig.InsertFilter代表的第一線以下異常。有沒有人有任何更好的想法,我怎麼可以檢索當前用戶會話ID插入數據庫?
訪問當前請求類型「System.NotImplementedException」的一個例外發生在ServiceStack.dll但在用戶代碼中沒有處理
附加信息:該APPHOST不支持通過一個Singleton
感謝傑米斯,我相信你們已經提供了兩種解決方法 - 通過你的POCO&也擴展方法推薦人羣在這個例子中可以使用RequestFilter來將UserId填充到RequestContext上。我不明白我怎麼可以接受這個建議,你會介意增加一點語法嗎? – Drammy
僅供參考:我已經有了RequestContext解決方案,但我寧願選擇推薦的方法,因爲它對我來說感覺更清潔。 – Drammy
@Drammy我已經更新了擴展方法來傳遞UserSession UserId,因爲這就是你所需要的。擴展方法是爲了使呼叫站點代碼更小(通過檢索ext方法中的UserId),所以這種改變使得它更加明確,但是每個呼叫站點代碼更多。 – mythz