[英]C# Entity Framework Core .Include() issue
我遇到了實體框架的“Include()”function 的問題
使用的框架:.NET Core 3.1 with Entity Framework Core 3.1.5
這些是我的實體
public class EntityA
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[Index(IsUnique = true)]
public int EntityBId { get; set; }
[ForeignKey("EntityBId")]
public EntityB EntityB { get; set; }
[DefaultValue(false)]
public bool IsConfirmed { get; set; }
}
public class EntityB
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Title { get; set; }
public string Description { get; set; }
}
所以我啟動了這個查詢:
public ICollection<EntityA> GetAll(string contextName)
{
DbContext context = GetContext(contextName);
ICollection<EntityA> collection = context.EntityAs
.Include(j => j.EntityB)
.Where(x => x.IsConfirmed)
.ToList();
return collection;
}
private DbContext GetContext(string contextName)
{
string contextDbConnectionString = _secretsRepository.GetDbConnectionString(contextName);
DbContextOptionsBuilder<DbContext> optionsBuilder = new DbContextOptionsBuilder<DbContext>();
optionsBuilder.UseSqlServer(contextDbConnectionString);
return new DbContext(optionsBuilder.Options);
}
查詢結果如下:
{
Id: 5
IsConfirmed: true
EntityB: null
EntityBId: 72
}
我不明白為什么“Include(j => j.EntityB)”沒有返回正確賦值的 EntityB 字段
當我嘗試使用所提供的實體構建數據 model 時,在 Index 屬性處遇到編譯錯誤。
[Required]
[Index(IsUnique = true)]
public int EntityBId { get; set; }
原來實體框架 6 庫曾經具有該屬性,但問題是關於實體框架核心。 所以我只是刪除了 Index 屬性並將其移至 OnModelCreating 方法以模仿類似的行為。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityA>().HasIndex(u => u.EntityBId).IsUnique();
}
有了這個,我應用代碼優先的方法來生成數據庫並運行程序。 執行后,ef core 生成了正確的查詢:
SELECT [e].[Id], [e].[EntityBId], [e].[IsConfirmed], [e0].[Id], [e0].[Description],
[e0].[Title]
FROM [EntityAs] AS [e]
INNER JOIN [EntityBs] AS [e0] ON [e].[EntityBId] = [e0].[Id]
WHERE [e].[IsConfirmed] = CAST(1 AS bit)
希望它有助於解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.