EF Core, возврат записи или создание и возврат - PullRequest
1 голос
/ 28 февраля 2020

У меня есть проект. 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' 

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

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

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

См .: DbSet.Add

В вашем коде:

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

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

Невозможно неявно преобразовать тип 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry' в 'project.model.mytable'

2 голосов
/ 28 февраля 2020
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, который предоставляет информацию отслеживания, а не фактическую сущность.

...