Entity Framework Включить - возвращает NULL - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу загрузить связанные сущности с EF одним вызовом БД (Eager Loading), чтобы добиться этого, я пытаюсь использовать оператор включения, как показано ниже.

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Утверждения Я получаю один элемент с нулевым возвращением, однако, если я запускаю его без включения, он возвращает сущность.После вышеприведенного утверждения, если я добавлю приведенное ниже условие для проверки на ноль, я получу обратно объект.

if(r1.HasAny() && r1[0] == null)
{
    r1 =
    await
        db.Request.Where(r => idList.Contains(r.RequestId)).ToListAsync();
}

В чем может быть причина того, что добавление включения может изменить возврат?У меня есть навигационные свойства, установленные как виртуальные и общедоступные.

Добавление объектов

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);
        }
    }
}
...