Ошибка в поиске с использованием предложения включают в себя: - PullRequest
1 голос
/ 01 марта 2020

Я использую. NET ядро ​​для разработки API-интерфейса платформы сущностей. Я получаю эту ошибку:

enter image description here

В этом фрагменте возникает ошибка.

public async Task<Country> Find(long key)
{
    return await _context.Country.Include(m => m.Zone)
        .FirstOrDefaultAsync(t => t.Id == key);
}

Если я удаляю предложение include ошибка исчезает.

public class Country
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public long Id { get; set; }
   public string Name { get; set; }
   public string Initials { get; set; }
   public int ZoneId { get; set; }
   [NotMapped]
   public virtual Zone Zone { get; set; }
}

public class Zone
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public long Id { get; set; }
   public string Name { get; set; }
}
CREATE TABLE country (
        id       INTEGER     PRIMARY KEY AUTOINCREMENT
                             UNIQUE
                             NOT NULL,
        name     STRING (20) NOT NULL,
        initials STRING (4)  NOT NULL,
        zoneId   INTEGER     NOT NULL
                             CONSTRAINT [country.zone] REFERENCES zone (id) 
    );

    CREATE TABLE zone (
        id   INTEGER     PRIMARY KEY AUTOINCREMENT
                         UNIQUE
                         NOT NULL,
        name STRING (20) NOT NULL
    );

Ps: интенсивность использования включения должна быть в состоянии загрузить всю сущность зоны (id, name, ...) данной страны

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Как уже отмечали другие, вы должны удалить [NotMapped] из свойства Country.Zone.

Country.ZoneId тип должен соответствовать Zone.Id, то есть long.

Наконец, вы должны аннотировать Country.ZoneId как внешний ключ:

[ForeignKey(nameof(Zone))]
public int ZoneId { get; set; }
0 голосов
/ 01 марта 2020

Не используйте NotMapped. Попробуйте поставить

[ForeignKey("ZoneId")]

поверх вашей зоны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...