检查EntityFramework中是否存在相关实体的最佳方法是什么

时间:2016-08-24 07:27:41

标签: c# entity-framework entity-framework-core

我有两个一对一或零关系的实体: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 个答案:

答案 0 :(得分:0)

您可以通过执行以下操作来执行此操作:

  1. 当您查询“Grave: Exception while preparing the app : Invalid resource : moduleJNDI__pm java.lang.RuntimeException: Invalid resource : moduleJNDI__pm ”实体时,请确保您还请求“Version”实体,如下所示。

    ChangeLog
  2. 这可确保EF始终尝试提取var versionWithChangeLog = context.Versions.Include(v => v.ChangeLog) .FirstOrDefault(v => v.Id == versionid); 实体的相关ChangeLog实体。

  3. 现在对相关的Version实体进行空检查。

    ChangeLog
  4. 基本上如果有相关记录,EF会一直拉它,因为我们要求它。如果它为null,则表示数据库没有记录。

    哦,如果你只想检查相关的更改日志实体是否存在,而不是检索它,你可以使用这些:

     if (versionWithChangeLog && versionWithChangeLog.ChangeLog != null)
     {
        // we got  a version entity with a changelog.
     }