【问题标题】:Trying to reference a query in a c# class尝试在 c# 类中引用查询
【发布时间】:2015-04-15 14:14:56
【问题描述】:

我正在尝试使用以下 sn-p 代码完成 2 件事(来自我的 Lightswitch 2013 解决方案的服务器项目中的 ApplicationDataService.lsml.cs)。

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");
    }
}

首先,我想确保每个用户只能看到他制作的东西。这与对相关表的预处理查询一起完美运行。

下一位旨在确保每个用户只能在某个表中创建一条记录。不幸的是,它似乎在查看整个表,而不是我所做的仅显示用户自己记录的查询。

我怎样才能让第二段代码只限制用户自己的记录,而不是全局表?

【问题讨论】:

  • 这似乎应该通过主键或唯一约束在 SQL 端强制执行
  • 我不知道 Lightswitch,但您是说您想在某些情况下(例如 databasecandidateCount)有条件地排除 PreprocessQuery,但在其他情况下应用它(限制用户仅使用项目由他创建)?
  • 不,我希望将PreprocessQuery 应用于databasecandidateCount,以便它是查询返回的记录计数,而不是表中记录的计数。感谢您的帮助!

标签: c# sql visual-studio visual-studio-lightswitch lightswitch-2013


【解决方案1】:

您实际上并没有调用该查询,是吗?根据提供的代码,您的查询称为 Query1,但您似乎没有调用它。我会做类似的事情:

int count = DataWorkspace.ApplicationData.Query1().Count(); 

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多