【发布时间】: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