C# 返回EFcore中新添加的记录
我正在使用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
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
就可以准确地返回我想要的内容。哇!不过,感谢您的理智检查:)