Попытка сослаться на запрос в классе С#

Я пытаюсь выполнить две вещи с помощью приведенного ниже фрагмента кода (из 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");
    }
}

Во-первых, я хочу убедиться, что каждый пользователь может видеть только то, что он сделал. Это, вместе с предварительным запросом к рассматриваемой таблице, работает отлично.

Следующий бит предназначен для того, чтобы каждый пользователь мог создать только одну запись в определенной таблице. К сожалению, похоже, что он просматривает всю таблицу, а не сделанный мной запрос, который показывает только собственные записи пользователя.

Как я могу получить этот второй бит кода, чтобы ограничить только собственные записи пользователя, а не глобальную таблицу?


person ed_boogle    schedule 15.04.2015    source источник
comment
это похоже на то, что должно быть применено на стороне SQL с первичным ключом или уникальным ограничением   -  person DLeh    schedule 15.04.2015
comment
Я не знаю Lightswitch, но вы говорите, что хотите условно исключить PreprocessQuery в определенных контекстах (например, databasecandidateCount), но применить его в других (ограничить пользователя только элементами, созданными им)?   -  person StuartLC    schedule 15.04.2015
comment
Нет, я бы хотел, чтобы PreprocessQuery применялось к databasecandidateCount, чтобы это было количество записей, возвращаемых запросом, а не количество записей в таблице. Спасибо за вашу помощь!   -  person ed_boogle    schedule 15.04.2015


Ответы (1)


Вы на самом деле не вызываете этот запрос, не так ли? Ваш запрос называется Query1 на основе предоставленного кода, но, похоже, вы его не вызываете. Я бы сделал что-то вроде:

int count = DataWorkspace.ApplicationData.Query1().Count(); 
person paulpitchford    schedule 16.04.2015