[英]What is the best way to check if related entity exists in EntityFramework
我有兩個具有一對零或一個關系的實體: Version
和ChangeLog
。 第二個存儲帶有changelog的文件(例如'ReadMe.html')。
public class Version
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ChangeLog ChangeLog { get; set; }
}
public class ChangeLog
{
[Key]
public int Id { get; set; }
public string FileName { get; set; }
public byte[] File { get; set; }
public int VersionId { get; set; }
public Version Version { get; set; }
}
一對一關系的代碼:
modelBuilder.Entity<Version>()
.HasOne(v => v.ChangeLog)
.WithOne(c => c.Version)
.HasForeignKey<ChangeLog>(c => c.VersionId);
如何檢查相關實體是否存在。 因此,對於一對多關系,我可以執行類似Product.Versions.Any()
。 一對一呢? 我應該使用上下文context.ChangeLogs.Any(c => c.VersionId == versionId)
嗎?
您可以通過執行以下操作來做到這一點:
當查詢“ Version
”實體時,請確保還請求“ ChangeLog
”實體,如下所示。
var versionWithChangeLog = context.Versions.Include(v => v.ChangeLog) .FirstOrDefault(v => v.Id == versionid);
這樣可以確保EF始終嘗試為Version
實體提取相關的ChangeLog
實體。
現在對相關的ChangeLog
實體執行null檢查。
if (versionWithChangeLog && versionWithChangeLog.ChangeLog != null) { // we got a version entity with a changelog. }
基本上,如果有相關記錄,EF就會一直將其拉出,因為我們要求這樣做。 如果為null,則表示數據庫沒有記錄。
哦,如果您只想檢查相關的變更日志實體是否存在,並且不檢索它,則可以使用以下命令:
var versionsWithChangeLog = context.Versions.Where(v => v.ChangeLog != null);
var versionsWithoutChangeLog = context.Versions.Where(v => v.ChangeLog == null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.