Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架Include-返回NULL_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架Include-返回NULL

C# 实体框架Include-返回NULL,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我想用一个DB调用加载EF相关的实体(急切加载),为了实现这一点,我尝试使用如下的include语句 var db = _DbContext; var r1 = await db.Request.Where(r => idList.Contains(r.RequestId)) .Include(r => r.RequestedService) ...more include

我想用一个DB调用加载EF相关的实体(急切加载),为了实现这一点,我尝试使用如下的include语句

var db = _DbContext;
     var r1 = await
                db.Request.Where(r => idList.Contains(r.RequestId))
                .Include(r => r.RequestedService)
                ...more include
                ...more include
                ...more include
                .ToListAsync();
当我使用include语句运行它时,我得到一个返回null的项,但是如果我不使用include运行它,它将返回实体。在上面的语句之后,如果我添加以下空检查条件,我将返回实体

if(r1.HasAny() && r1[0] == null)
{
    r1 =
    await
        db.Request.Where(r => idList.Contains(r.RequestId)).ToListAsync();
}
当添加一个include可以更改退货时,原因可能是什么?我已将导航属性设置为虚拟和公共

添加实体

public class Request : BaseEntity
{
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long RequestId { get; set; }

        public virtual ICollection<RequestedService> RequestedService { get; set; }
}


public class RequestedService : BaseEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long RequestedServiceId { get; set; }
    [Required]
    public long RequestId { get; set; }
    public virtual Request Request { get; set; }
}
public class RequestDbContext : DbContextBase
{
    public object SyncObject = new object();

    public RequestDbContext()
    {
        Database.SetInitializer<RequestDbContext>(null);
    }

    public RequestDbContext(string connectionStringName) : base(string.Empty)
    {
        Database.SetInitializer<RequestDbContext>(null);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
    }

    public virtual DbSet<Request> Request { get; set; }

    public virtual DbSet<RequestedService> RequestedService { get; set; }

    public class RequestDbContextInitializer : CreateDatabaseIfNotExists<RequestDbContext>
    {
        protected override void Seed(RequestDbContext context)
        {
            base.Seed(context);
        }
    }
}
公共类请求:BaseEntity
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
公共长请求ID{get;set;}
公共虚拟ICollection RequestedService{get;set;}
}
公共类RequestedService:BaseEntity
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long RequestedServiceId{get;set;}
[必需]
公共长请求ID{get;set;}
公共虚拟请求{get;set;}
}
公共类RequestDbContext:DbContextBase
{
公共对象SyncObject=新对象();
公共RequestDbContext()
{
Database.SetInitializer(null);
}
public RequestDbContext(string connectionStringName):基(string.Empty)
{
Database.SetInitializer(null);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
基于模型创建(modelBuilder);
}
公共虚拟数据库集请求{get;set;}
公共虚拟数据库集RequestedService{get;set;}
公共类RequestDbContextInitializer:CreateDatabaseIfNotExists
{
受保护的覆盖无效种子(RequestDbContext上下文)
{
种子(上下文);
}
}
}

您是否尝试过增量引入包含的关系?凭直觉我会看到一个错误的FK声明在一个必要的关系。EF将应用这些作为内部联接,如果它恰好映射到错误的列,则可能导致主记录无法返回。(或者在其他情况下,返回错误的相对行。)谢谢@StevePy Yes,即使我尝试只添加单个包含,也会导致问题。此外,我还跟踪了生成的查询,查询返回的数据正确,并在正确的键上进行了正确的连接。。。你能为请求和单一包含场景(假设RequestedService)提供实体定义和任何配置吗?好的,我仍然怀疑FK不匹配。我看到的一件事是,在RequestService(RequestSkill?)中,RequestId应该标记为
[ForeignKey(Request)]
,而不是
[Required]
。在正确返回实体的情况下,请根据您的数据检查引用的实体,它们是否正确或与其他请求关联?.Include不会创建内部联接,而是创建左外部联接。然而,我预计其中会出现异常,可能是由于不匹配的模式。