簡體   English   中英

檢查EntityFramework中是否存在相關實體的最佳方法是什么

[英]What is the best way to check if related entity exists in EntityFramework

我有兩個具有一對零或一個關系的實體: VersionChangeLog 第二個存儲帶有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)嗎?

您可以通過執行以下操作來做到這一點:

  1. 當查詢“ Version ”實體時,請確保還請求“ ChangeLog ”實體,如下所示。

     var versionWithChangeLog = context.Versions.Include(v => v.ChangeLog) .FirstOrDefault(v => v.Id == versionid); 
  2. 這樣可以確保EF始終嘗試為Version實體提取相關的ChangeLog實體。

  3. 現在對相關的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM