我有一个WPF应用程序.
数据从存储库传递到ViewModel.检索数据的更好方法是什么:
方法1:
在存储库中:
public List<LogDetail> GetLogsOfTypeForCase(int caseId, LoggType logType)
{
using (var ctx = new SidraEntitiesNoChangesDetection())
{
var logs = (from l in ctx.Loggs
where l.log_fk_caseid == caseId && l.log_operation == logType.ToString()
select new LogDetail()
{
ColumnName = l.log_columnname,
DateAndTime = l.log_dateandtime,
IdentificationDetail = l.log_identificationDetail,
NewValue = l.log_new_value,
OldValue = l.log_old_value,
TableName = l.log_tablename,
UserCode = l.User.usr_code
}).ToList();
return logs;
}
}
Run Code Online (Sandbox Code Playgroud)
在ViewModel中:
await Task.Run(
() =>
{
if (false == this.CancellationTokenSource.IsCancellationRequested)
{
this.CaseLogs = this.dataAdapter.GetLogsOfTypeForCase(this.CaseId, LoggType.S);
}
}, …Run Code Online (Sandbox Code Playgroud) 我有一个带有几个选项卡的WPF表单.当我加载表单时,我也尝试在后台加载一些数据选项卡.
代码如下所示:
public static List<MyModel> GetCaseNotes(int someId)
{
return GetCaseNotesAsync(debtorId).Result;
}
public static async Task<List<MyModel>> GetCaseNotesAsync(int someId)
{
Task<List<MyModel>> tsk = Task.Run(() => GetCaseNotesFromDb(someId));
return await tsk.ConfigureAwait(false);
}
public static List<MyModel> GetCaseNotesFromDb(int debtorId)
{
//get some data from database
}
Run Code Online (Sandbox Code Playgroud)
但是,UI仍在等待从数据库中获取数据......有什么想法吗?