.net core EF核心,返回条目或创建并返回

.net core EF核心,返回条目或创建并返回,.net-core,entity-framework-core,.net Core,Entity Framework Core,我有一个.NETFramework 4.5项目,我正试图转换为asp.NETCore3.1。我很难找到转换以下代码的简单方法: var entry = db.mytable.FirstOrDefault(s => s.Name == "myname"); if (entry == null) { entry = db.mytable.Add(new mytable() { Name = "myname" }); db.SaveChanges(

我有一个.NETFramework 4.5项目,我正试图转换为asp.NETCore3.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 core后,此代码引发以下错误:

Cannot implicitly convert type 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<project.model.mytable>' to 'project.model.mytable' 
有人知道解决这个问题的好方法吗

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.Addnew mytable。。。返回提供跟踪信息的EntityEntry,而不是实际实体


实际上,entry=db.mytable.Addnew mytable。。。返回提供跟踪信息的EntityEntry,而不是实际的实体。

要添加到@JMP的答案中:

见:

在代码中:

entry = db.mytable.Add(new mytable()
{
    ID = id
});
您分配Add的返回,即EntityEntry,而在代码的前面,entry变量被声明为tenty。这就是你得到信息的原因:

无法将类型“Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry”隐式转换为“project.model.mytable”


要添加到@JMP的答案中:

见:

在代码中:

entry = db.mytable.Add(new mytable()
{
    ID = id
});
您分配Add的返回,即EntityEntry,而在代码的前面,entry变量被声明为tenty。这就是你得到信息的原因:

无法将类型“Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry”隐式转换为“project.model.mytable”


谢谢@dugas,在你发帖的同时也添加了该信息:谢谢@dugas,在你发帖的同时也添加了该信息:对不起,在阅读了你的答案后,我更新了问题。添加后是否会更新条目变量以包含mytable中标识列的值?一旦调用SaveChanges,它将具有跟踪的表id列yes。我也在我的答案中添加了这一点。对不起,在阅读了你的答案后,我更新了问题。添加后是否会更新条目变量以包含mytable中标识列的值?一旦调用SaveChanges,它将具有跟踪的表id列yes。我也在我的答案中添加了这一点。