Entity framework 实体框架未与生成内部联接。包括

Entity framework 实体框架未与生成内部联接。包括,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我有一个项目,.Include不生成内部联接,而内部联接是在使用相同DbContext和代码的其他项目中生成的 我首先使用的是EF核心代码。DbContext通过NuGet与其他项目共享 下面是讨论中的两个类及其在DbContext中的配置: [Table("Project", Schema = "ProjectManagement")] public class AxosoftProject { [Key, DatabaseGenerated(DatabaseGeneratedOpti

我有一个项目,
.Include
不生成内部联接,而内部联接是在使用相同DbContext和代码的其他项目中生成的

我首先使用的是EF核心代码。DbContext通过NuGet与其他项目共享

下面是讨论中的两个类及其在DbContext中的配置:

[Table("Project", Schema = "ProjectManagement")]
public class AxosoftProject
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int AxosoftId { get; set; }
    public int? AxosoftParentId { get; set; }

    public AxosoftProject AxosoftParent { get; set; }
    public List<AxosoftProject> Children { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }
    public string Description { get; set; }
    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }
    public DateTime UpdateDate { get; set; }
    public ICollection<AxosoftItem> Items { get; set; }
}

[Table("Item", Schema = "ProjectManagement")]
public class AxosoftItem
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int AxosoftId { get; set; }
    public int AxosoftProjectId { get; set; }
    public AxosoftProject AxosoftProject { get; set; }
    public string Name { get; set; }
    public string ItemType { get; set; }
    public string SubItemType { get; set; }
    public decimal PercentComplete { get; set; }
    public DateTime UpdateDate { get; set; }
}
modelBuilder.Entity<AxosoftProject>().HasKey(x => x.AxosoftId);
modelBuilder.Entity<AxosoftProject>().HasOne(x => x.AxosoftParent).WithMany(x => x.Children);
modelBuilder.Entity<AxosoftProject>().HasMany(x => x.Items);

modelBuilder.Entity<AxosoftItem>().HasKey(x => x.AxosoftId);
modelBuilder.Entity<AxosoftItem>().HasOne(x => x.AxosoftProject);
根据我在上面代码中执行的项目,它要么执行内部联接,要么根本不执行内部联接。我尝试删除上面代码不执行内部联接的整个项目,然后从存储库中克隆它,从新开始,仍然没有内部联接

我如何进一步调试它?我怀疑它不起作用的项目可能使用了旧版本的DLL,即使它看起来指向了正确的DLL

更新

为了验证include确实不起作用,我做了一个额外的测试。如果我分别将AxSoftItems加载到DbContext中,那么EF将填充每个AxSoftProject的Items集合。例如:

var projects = MyEntities.AxosoftProjects.Include(x => x.Items).ToList();

var listwithitems1 = projects.Where(x => x.Items != null).ToList(); // 0 items

var items = MyEntities.AxosoftItems.ToList();

var listwithitems2 = projects.Where(x => x.Items != null).ToList(); // 41 items
更新2


EF Core的代码和引用放在ASP.NET MVC项目中。将代码移动到单独的类库“修复”了这个问题,内部连接不会被忽略,代码也完全相同。我打算下载源代码并进行调试,以找出在MVC项目中忽略Include的原因

“它要么进行内部连接,要么根本不进行内部连接”-您是如何确定的?通过SQL Server探查器?还是基于你看到的数据?如果是前者,请确保引用相同的NuGet版本。可能您已经安装了一个早期版本,其中尚未配置关系。检查DLL版本,或者如果没有进行正确的版本控制,请反编译DLL(例如使用JustDecompile)。如果DLL版本完全相同,但使用的是不同的数据库,请检查数据。我们真的无法回答这个问题。我是通过SQL Server探查器确定的。还尝试用JetBrains反编译器反编译DLL(在类上按F12)并比较它们。我觉得奇怪的是,当我创建一个新项目并进行反编译时,程序集位置与我在VS中看到的项目不同。因此,从项目a进行反编译将显示项目B的程序集位置。我将尝试将项目发布到文件夹,并比较DLL的位置,也许这会证明something@CodeCaster将项目发布到单独的文件夹时,dll的版本似乎是正确的。还使用“模块”窗口查找IIS使用的dll的正确路径,它们也是正确的版本。检查我更新的问题,做了一些额外的调试。如果我从DB中手动选择项,EF似乎会填充Items集合,这一定意味着在DbContext中处理关系是好的。“它将执行内部联接或根本不执行内部联接”-您是如何确定这一点的?通过SQL Server探查器?还是基于你看到的数据?如果是前者,请确保引用相同的NuGet版本。可能您已经安装了一个早期版本,其中尚未配置关系。检查DLL版本,或者如果没有进行正确的版本控制,请反编译DLL(例如使用JustDecompile)。如果DLL版本完全相同,但使用的是不同的数据库,请检查数据。我们真的无法回答这个问题。我是通过SQL Server探查器确定的。还尝试用JetBrains反编译器反编译DLL(在类上按F12)并比较它们。我觉得奇怪的是,当我创建一个新项目并进行反编译时,程序集位置与我在VS中看到的项目不同。因此,从项目a进行反编译将显示项目B的程序集位置。我将尝试将项目发布到文件夹,并比较DLL的位置,也许这会证明something@CodeCaster将项目发布到单独的文件夹时,dll的版本似乎是正确的。还使用“模块”窗口查找IIS使用的dll的正确路径,它们也是正确的版本。检查我更新的问题,做了一些额外的调试。如果我从DB中手动选择项,EF似乎会填充Items集合,这一定意味着在DbContext中处理关系的效果良好。
var projects = MyEntities.AxosoftProjects.Include(x => x.Items).ToList();

var listwithitems1 = projects.Where(x => x.Items != null).ToList(); // 0 items

var items = MyEntities.AxosoftItems.ToList();

var listwithitems2 = projects.Where(x => x.Items != null).ToList(); // 41 items