需要做等效的 .实体框架中没有导航属性的任何内容
本文关键字:导航 属性 任何内 框架 实体 | 更新日期: 2023-09-27 18:31:14
我的数据库有两个表,Reads
和Alarms
。 从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;