Я пытаюсь выполнить две вещи с помощью приведенного ниже фрагмента кода (из ApplicationDataService.lsml.cs в серверном проекте моего решения Lightswitch 2013).
partial void Query1_PreprocessQuery(ref IQueryable<CandidateBasic> query)
{
query = from item in query where item.CreatedBy == this.Application.User.Name select item;
}
partial void CandidateBasics_Validate(CandidateBasic entity, EntitySetValidationResultsBuilder results)
{
var newcandidateCount = this.DataWorkspace.ApplicationData.Details.GetChanges().AddedEntities.OfType<CandidateBasic>().Count();
var databasecandidateCount = this.CandidateBasics.GetQuery().Execute().Count();
const int maxcandidateCount = 1;
if (newcandidateCount + databasecandidateCount > maxcandidateCount)
{
results.AddEntityError("Error: you are only allowed to have one candidate record");
}
}
Во-первых, я хочу убедиться, что каждый пользователь может видеть только то, что он сделал. Это, вместе с предварительным запросом к рассматриваемой таблице, работает отлично.
Следующий бит предназначен для того, чтобы каждый пользователь мог создать только одну запись в определенной таблице. К сожалению, похоже, что он просматривает всю таблицу, а не сделанный мной запрос, который показывает только собственные записи пользователя.
Как я могу получить этот второй бит кода, чтобы ограничить только собственные записи пользователя, а не глобальную таблицу?
PreprocessQuery
в определенных контекстах (например,databasecandidateCount
), но применить его в других (ограничить пользователя только элементами, созданными им)? - person StuartLC   schedule 15.04.2015PreprocessQuery
применялось кdatabasecandidateCount
, чтобы это было количество записей, возвращаемых запросом, а не количество записей в таблице. Спасибо за вашу помощь! - person ed_boogle   schedule 15.04.2015