Каждая вторая строка данных имеет нулевое отношение в EF Core - PullRequest
0 голосов
/ 04 июля 2018

У меня есть база данных, в которой я смоделировал данные в нескольких строках таблицы с именем Bets, заполнив первые четыре строки числом 1, а следующие четыре строки числом 2. Существует таблица Team со строками команд, соответствующими идентификаторам 1 и 2.

Я использую .NET Core 2.1.0 и EF Core 2.1.0 с базой данных SQLite. Существует класс 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. Вот некоторый вывод из непосредственного окна:

> bets[0].Team
(null)
> bets[1].Team
{betting.DAL.Primitives.Team}
    Id: 1
    Name: "Uruguay"
> bets[2].Team
(null)
> bets[3].Team
{betting.DAL.Primitives.Team}
    Id: 1
    Name: "Uruguay"
> bets[4].Team
(null)
> bets[5].Team
{betting.DAL.Primitives.Team}
    Id: 2
    Name: "Russia"
> bets[6].Team
(null)
> bets[7].Team
{betting.DAL.Primitives.Team}
    Id: 2
    Name: "Russia"
> 

Есть идеи, что может вызвать это?

1 Ответ

0 голосов
/ 05 июля 2018

Согласно

заполнение первых четырех строк номером 1 и следующих четырех строк номером 2

отношение между Bet и Team должно быть много ко многим. Несмотря на то, что с беглым API вы говорите EF Core, что следует рассматривать его как один-к-одному, следовательно, он запутывается, когда начинает обрабатывать данные - реальное поведение не имеет значения, очевидно, это странные данные, которые вы получаете, предпочтительно должно быть исключением, но в любом случае, есть много вещей, ожидающих реализации в EF Core, поэтому мы можем жить с этим.

С учетом сказанного просто измените .WithOne() на .WithMany(). Проблема решена.

...