Я хочу загрузить связанные сущности с 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);
}
}
}