实体框架核心-排除功能?

时间:2020-02-10 14:06:22

标签: entity

我正在使用Entity Framework Core。让我感到困惑的是,当您在两个数据库表之间建立关系时,它会进行双向映射。因此,当您尝试加载表并使用急切/显式加载时,尝试击中终结点时最终会遇到无限深度的SQL错误。

在我的项目中,我有一个名为“公司和项目”的实体。一个公司有很多项目,但是每个项目只有一个公司。我在数据库上下文中具有以下关系:

entity.HasOne(d => d.Company)
   .WithMany(p => p.Project)
   .HasForeignKey(d => d.CompanyId)
   .OnDelete(DeleteBehavior.ClientSetNull)
   .HasConstraintName("FK_Project_Company");

当我使用紧急加载时,当我在REST API中点击Company端点时,我想包含“ Project”:

var test = _context.FrmCompany
    .Include(FrmCompany => FrmCompany.FrmProject)
    .ToList();

但是,“项目”有一个“公司”字段,这会导致无限的自引用循环,并在我的浏览器中达到32的最大深度。我可以遍历并将项目内部的company字段设置为null以便获得:

foreach (var item in test)
        {
            foreach (var p in item.Project)
            {
                p.Company = null;
            }
        }

但是,这看起来有些过时了,应该有一种方法可以更好地使用Entity Framework Core进行处理。我的数据库设置方式是否有问题? (首先是它的数据库,我不能对其进行太多更改)还是我的EF Core实施存在问题?你知道我能做些什么来超越这个吗?是否有一个“排除”之类的标签,我可以用来说“不要在'Company.Project'内加载'Company'?

0 个答案:

没有答案