我有兩個外鍵引用到同一個表的問題。 外鍵id字段被填充,但導航字段和列表(Team字段)不是 - 它們都是空的。實體框架核心兩個外鍵 - 相同表
我的類別是:
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Fixture> HomeFixtures { get; set; }
public virtual ICollection<Fixture> AwayFixtures { get; set; }
}
public class Fixture
{
public int Id { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
public Team HomeTeam { get; set; }
public Team AwayTeam { get; set; }
}
和我的DbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Team> Teams { get; set; }
public DbSet<Fixture> Fixtures { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Fixture>()
.HasOne(f => f.HomeTeam)
.WithMany(t => t.HomeFixtures)
.HasForeignKey(t => t.HomeTeamId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
modelBuilder.Entity<Fixture>()
.HasOne(f => f.AwayTeam)
.WithMany(t => t.AwayFixtures)
.HasForeignKey(t => t.AwayTeamId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
}
}
我曾嘗試加入[ForeignKey()]
屬性的HomeTeam和AwayTeam屬性,但它沒有任何效果。 我還試圖改變OnModelCreating方法工作的其他方式,即
modelBuilder.Entity<Team>()
.HasMany(t => t.HomeFixtures)
.WithOne(f => f.HomeTeam)
.HasForeignKey(f => f.HomeTeamId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
與同爲遠離固定裝置,但是這將產生相同的行爲。
它似乎並不無論我如何查詢,但最簡單的情況是
Fixture fixture = await _context.Fixtures.SingleOrDefaultAsync(f => f.Id == id);
返回固定對象包含團隊的ID是有效的,並在數據庫中,但仍沒有填充的團隊對象。
有沒有人知道我在做什麼錯? 這是一個全新的項目和全新的數據庫,因此不存在傳統代碼干擾。 我使用Visual Studio 2017rc與實體框架核心。
數據存在於數據庫中?顯示查詢。 –
@SteveGreene我已經添加了一個示例查詢的問題,但它發生在多個查詢。在Fixture對象中返回的TeamIds是有效的並且與數據庫中的Team記錄匹配。 – Mog0
EF內核中還不支持延遲加載請參閱https://github.com/aspnet/EntityFramework/issues/3797 您需要在導航上進行急切加載以使其填充。 Doc鏈接:https://docs.microsoft.com/en-us/ef/core/querying/related-data – Smit