我有一个数据库,其中我在名为Bets
的表中的几行中模拟了数据,方法是用数字1
填充前四行,用数字{{ 1}}。有一个2
表,其中的团队行对应于ID Team
和1
。
我正在将.NET Core 2.1.0和EF Core 2.1.0与SQLite数据库一起使用。有一个类2
与类Bet
有多对一的关系。它们如下所示:
Team
要访问数据,我使用以下语法:
public class Bet
{
public int Id { get; set; }
public int TeamId { get; set; }
public Team Team { get; set; }
}
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
}
当我返回结果时, 每秒 行将public class BettingDbContext : DbContext
{
public BettingDbContext(DbContextOptions<BettingDbContext> options)
: base(options) { }
public virtual DbSet<Bet> Bets { get; set; }
public virtual DbSet<Team> Teams { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Bet>(entity =>
{
entity.ToTable("Bets");
entity.HasIndex(e => e.Id)
.IsUnique();
entity.HasOne(b => b.Team)
.WithOne();
});
modelBuilder.Entity<Team>(entity =>
{
entity.ToTable("Teams");
entity.HasIndex(e => e.Id)
.IsUnique();
});
}
}
设置为其关系属性null
。这是即时窗口的一些输出:
Team
有什么想法会导致这种情况吗?
答案 0 :(得分:2)
根据
用数字1填充前四行,用数字2填充后四行
Bet
和Team
之间的关系必须是多对多的。使用流畅的API时,您是在告诉EF Core一对一对待,因此在开始处理数据时会感到困惑-实际行为无关紧要,显然这是您所获取的怪异数据,最好是应该是一个例外,但是无论如何,在EF Core中有很多事情需要等待实现,因此我们可以接受。
话虽如此,只需将.WithOne()
更改为.WithMany()
。问题解决了。