需要做等效的 .实体框架中没有导航属性的任何内容

本文关键字:导航 属性 任何内 框架 实体 | 更新日期: 2023-09-27 18:31:14

我的数据库有两个表,ReadsAlarms。 从Reads (1) 到Alarms(多)表存在一对多关系。 由于各种原因,删除了Alarms表上的外键约束。 我无法恢复此约束。 因此,我的实体框架模型中的Read对象没有Alarms导航属性。

我的ReadViewModel类中有一个名为 HasAlarms 的布尔属性。 我希望将其设置为 true 如果Alarms表中至少有一行与Read相关。 我知道如果Alarms导航属性在那里,我可以使用这样的东西来做到这一点:

var reads = from read in context.Reads
            select new ReadViewModel { . . . };
foreach ( ReadViewModel read in reads ) {
    read.HasAlarms = read.Alarms.Any();
}

但是,我不再具有警报导航属性。 在我目前的情况下,最有效的方法是什么?

托尼

需要做等效的 .实体框架中没有导航属性的任何内容

你需要这样的东西:

foreach ( ReadViewModel read in reads ) {
    read.HasAlarms = context.Alarms.Any(a => a.ReadId == read.Id);
}

您还可以执行 join,以在一个查询中获取状态:

var results = from r in reads
join a in context.Alarms on r.Id equals a.ReadId into ra // perform a left join
from a in ra.DefaultIfEmpty()                            // on Alarms
select new { Read = r, HasAlarm = a != null };
foreach (var res in results)
   res.Read.HasAlarm = res.HasAlarm;