C# 实体框架:Find在存储过程之后返回null
我有一个将数据插入表的存储过程。我在存储过程语句之后立即使用C# 实体框架:Find在存储过程之后返回null,c#,sql-server,entity-framework,stored-procedures,C#,Sql Server,Entity Framework,Stored Procedures,我有一个将数据插入表的存储过程。我在存储过程语句之后立即使用.Find进行查询,查看插入是否发生,它是否返回null。如果我稍后使用另一个DbContext进行查询,它就在那里,因此我需要刷新上下文 一些示例代码: string name = "Awesome book"; string id = Guid.NewGuid().ToString(); // Entity Framework context BooksDb db = new BooksDb(); // call to stor
.Find
进行查询,查看插入是否发生,它是否返回null。如果我稍后使用另一个DbContext
进行查询,它就在那里,因此我需要刷新上下文
一些示例代码:
string name = "Awesome book";
string id = Guid.NewGuid().ToString();
// Entity Framework context
BooksDb db = new BooksDb();
// call to stored procedure
db.insert_book(id, name);
// check if it's there
book b = db.books.Find(id); // b is null
我是否需要刷新某些内容才能找到我正在查找的id为的项目
更新:多亏了下面的评论,我找到了答案。我实际上是在寻找我以为要插入的id,但是存储过程有自动创建id的功能。所以基本上我是在质疑一些不存在的东西 检查存储过程后,我发现它具有自动id创建功能,因此我实际上并没有查询我认为有id的项。
SaveChanges
在DBContext
上被调用会确保它也亮起。请,显示您的SP以及如何调用它,就像您需要在SP将上下文中的更改与数据存储同步后调用SaveChanges一样。我不这么认为,insert\u book
做什么(可以显示代码)<代码> BooSDB。书籍<代码>应该是<代码> dBSET ,看来您对<代码>插件StutoBoo.<代码>的调用并没有将添加的书附加到<代码> dBSET 内存中,直到调用了<代码> SaveRechange < /C> > < <代码> dBrave >,这就是为什么找不到它。你会得到很多免费的。