Невозможно установить значение идентификатора свойства в EF CORE, если свойство включено в select - PullRequest
0 голосов
/ 09 мая 2018

Я использую Entity Framework 2.0.1, и у меня возникла проблема, которая работала нормально в версиях EF до 2.x.

Если я выбираю объект и включаю свойство в выборку и хочу обновить это свойство, я должен обновить ссылку на объект, а не Id, ссылающийся на объект, чтобы EF распознал и сохранил изменение.

Вот пример. Ranking.RankTypeId - это внешний ключ для RankType.RankTypeId. Я выбираю и включаю свойство RankType.

public Ranking GetRankingById(int rankingId)
{
    using (var context = new BestNetDatabaseContext())
    {
        var rankings = context.Rankings.AsQueryable();

        var foundRanking = rankings.Include(x => x.RankType).FirstOrDefault(x => x.RankingId == rankingId);

        if (foundRanking == null)
            throw new RankingNotFoundException();

        return foundRanking;
    }
}

Если я хочу обновить Ranking.RankType, я должен выбрать и получить экземпляр объекта RankType и установить его.

ranking.RankType = _rankTypeService.GetRankTypeById(1);

То, что я хотел бы сделать (и делал в течение многих лет), это просто установить Id.

ranking.RankTypeId = 1;

Я присоединяю объект к контексту и устанавливаю состояние «грязный» перед сохранением изменений (этот код работал в предыдущих версиях EF CORE).

public void UpdateRanking(Ranking ranking)
{
    using (var context = new MyDatabaseContext())
    {
        context.Rankings.Attach(ranking);
        context.Entry(ranking).State = EntityState.Modified; 
        //ranking.RankTypeId IS correctly set to 1 at this point
        context.SaveChanges();
    }
}

Если я не использую оператор включения, я могу установить Id, и EF распознает изменение и обновит базу данных. Кажется, он просто игнорирует обновление Id, когда я включаю свойство. Мысли?

...