У меня есть проект .net Framework 4.5, который я пытаюсь преобразовать в asp .net core 3.1. У меня возникли проблемы с поиском простого способа преобразования следующего кода:

var entry = db.mytable.FirstOrDefault(s => s.Name == "myname");
if (entry == null)
{
    entry = db.mytable.Add(new mytable()
    {
        Name = "myname"
    });
    db.SaveChanges();
}
int myNewID = entry.ID;

После преобразования в ядро .net этот код выдает следующую ошибку:

Cannot implicitly convert type 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<project.model.mytable>' to 'project.model.mytable' 

Кто-нибудь знает хороший способ решить эту проблему?

1
Pathead 28 Фев 2020 в 18:27

2 ответа

Лучший ответ
var entry = db.mytable.FirstOrDefault(s => s.ID == id);
if (entry == null)
{
    entry = new mytable()
    {
        ID = id
    });

 db.mytable.Add(entry);

    db.SaveChanges();
}
int id = entry.id;

Как и было, entry = db.mytable.Add (new mytable () ... возвращает EntityEntry, который предоставляет информацию отслеживания, а не фактическую сущность.

2
JMP 28 Фев 2020 в 18:19

Чтобы добавить ответ @ JMP:

См. DbSet. Добавить

В вашем коде:

entry = db.mytable.Add(new mytable()
{
    ID = id
});

Вы присваиваете возвращаемое значение Add, которым является EntityEntry , тогда как ранее в вашем коде переменная "entry" объявлялась как TEntity. Вот почему вы получаете сообщение:

Не удается неявно преобразовать тип «Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry» в «project.model.mytable»

2
dugas 28 Фев 2020 в 15:40