2017-01-27 3 views
1

У меня очень быстрый вопрос. При выборе записи в EF 7 RC2, похоже, она не включает вновь добавленную запись.EF7 RC2 linq select не включает недавно добавленную запись

Вот мой код:

public tblCategory AddOrUpdateCat(ref DbLocal ef, int catId, string catName, int catType) 
{ 
    tblCategory db = ef.tblCategories.FirstOrDefault(rec => (rec.CatId == catId)); 
    if (db == null) 
    { 
     db = new tblCategory(); 
     db.CatId = catId; 
     ef.tblCategories.Add(db); 
    } 
    db.Name = catName; 
    db.CatType = catType; 
    ef.SaveChanges(); 
    return db; 
} 

Второй раз вызов функции с тем же CatID бросает исключение:

Исключение брошено: 'System.InvalidOperationException' в Microsoft.EntityFrameworkCore. dll

Дополнительная информация: Экземпляр объекта типа 'tblCategory' не может быть отслежен, потому что другой экземпляр этого тип с тем же ключом уже отслеживается. При добавлении новых объектов, для большинства типов ключей уникального

Это потому, что второй раз, вызывая ef.tblCategories.FirstOrDefault(rec => (rec.CatId == catId)) с тем же идентификатором не будет получать новый добавленную запись.

Это поведение отличается оттого, что в RC1. Любая идея, как сделать так, чтобы он вел себя как в RC1?

Спасибо!

+0

Кто говорит, что RC1 правильно себя? И почему вы все еще используете EF7 (Core) RC2? –

ответ

1

Это не должно быть tblCategory db = ef.tblCategories.FirstOrDefault(rec => (rec.CatId == catId)); или если catId является первичным ключом, то tblCategory db = ef.tblCategories.Find(catId);

предполагая ef это ваше DbContext

+0

Да, я забыл положить в ef. Но это все еще не работает. Он не найдет CatId, пока он не будет сохранен в базе данных. Он работал над EF 7 RC1. – Sam

+0

@Sam Я не могу воспроизвести эту проблему. Просьба предоставить простой воспроизводимый образец кода. Вы можете загрузить свой проект кода и отправить ссылку здесь. –

+0

@ XavierXie-MSFT - Я вернулся к EF-RC1, так как не мог понять, как исправить эту проблему. Оказалось, что данные не были сохранены в базе данных. До сих пор я обнаружил, что если я откажусь от ** Компиляции с цепочкой инструментов .NET Native **, он работает (т. Е. Данные сохраняются). Но я слишком боюсь предоставить обновленную версию своим клиентам, не проходя через каждый из модулей сохранения, чтобы убедиться, что данные сохранены правильно. Итак, я вернулся к RC1. В настоящий момент я очень занят, когда я свободен, я постараюсь подмножить свой код и разместить его здесь. – Sam

Смежные вопросы