Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回EFcore中新添加的记录_C#_Entity Framework_.net Core - Fatal编程技术网

C# 返回EFcore中新添加的记录

C# 返回EFcore中新添加的记录,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,我正在使用EFCore做一个原型,并且正在努力寻找一种返回我刚刚添加到实体集合中的对象的好方法 例如: public Songleader AddSongleader(int congregationId, Songleader songleader) { var congregation = _dbContext.Congregations.Include(c => c.Songleaders).FirstOrDefault(c => c.Id == congregatio

我正在使用EFCore做一个原型,并且正在努力寻找一种返回我刚刚添加到实体集合中的对象的好方法

例如:

public Songleader AddSongleader(int congregationId, Songleader songleader)
{
    var congregation = _dbContext.Congregations.Include(c => c.Songleaders).FirstOrDefault(c => c.Id == congregationId);
    congregation.Songleaders.Add(songleader);                        
    _dbContext.SaveChanges();

    //TODO: return the recently-added record...
    return null;
}
一个
集会
有一群
领唱歌手
。但是,一旦保存了上下文,我就不确定返回新实例的好方法。Songleader的
Id
是在插入DB时生成的,因此我不能只返回传入方法的对象


在这种情况下,有没有一个很好的策略来帮助EF实现这一点?

您可以将
歌曲领导者
返回给调用者,或者只返回通过
SaveChanges()方法返回的整数值。这完全取决于你的要求

在控制器中,您可以使用
CreatedAtRoute
方法返回响应

这是一个很好的教程,你可以阅读。它提到了一些关于RESTAPI的HTTP建议


是否要从模型中排除Id属性?Songleader包含(int)Id、(string)FirstName、(string)LastName。但是Id实际上是由DBMS分配的,而不是由调用者分配的。因此,在SaveChanges()之前,它肯定是0。这是一个存储库方法,位于API控制器下面,其中输入方法是一个DTO,只包含FirstName/LastName,Automapper将其转换为Model。除非他们彻底改变EF7中EF的行为方式,因为我还没有使用它,因为它仍然缺少关键功能,数据库生成的ID应该在添加对象后对其进行设置。这是EF6的默认行为。正如我所说,他们可能已经在EF7中消除了这种行为。是的,你完全正确
songleader
作为参数添加到集合中,然后设置它的ID,如果我返回
songleader
,它将设置我期望的所有内容。只是我忽略了一个基本的“参考传递”。哎呀!谢谢哇,也许我会把这归咎于后期开发
songleader
.SaveChanges()
之后得到更新,因为它是通过引用传递的,所以只要返回
songleader
就可以准确地返回我想要的内容。哇!不过,感谢您的理智检查:)