gpt4 book ai didi

postgresql - EF Core FromSQL 查询不会立即执行 (PostgreSQL)

转载 作者:行者123 更新时间:2023-11-29 11:36:49 28 4
gpt4 key购买 nike

我在PostgreSQL中写了一个插入函数如下:

CREATE OR REPLACE FUNCTION public.insert_blog("Url" character)
RETURNS void AS
$BODY$Begin
Insert Into "Blogs"("Url") Values("Url");
End$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.insert_blog(character)
OWNER TO postgres;

上述函数在Blogs 表中添加了一个条目(Url 是一个参数)。

我正在尝试在 .Net Core (Npgsql.EntityFrameworkCore.PostgreSQL) 中使用这个函数,如下所示:

    [HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Blog blog)
{
if (ModelState.IsValid)
{
//This works fine
var count = _context.Blogs.FromSql("Select insert_blog({0})", blog.Url).Count();

//This doesn't work -- it gives an error of "42601: syntax error at or near "insert_blog""
//var count = _context.Blogs.FromSql("insert_blog @Url={0}", blog.Url).Count();

return RedirectToAction("Index");
}

return View(blog);
}

有人能告诉我为什么第二个命令不起作用吗?另外,即使第一个命令有效,这是正确的方法吗?

由于我必须编写 .FromSql(...).Count() 才能使其正常工作,如果我删除 .Count() 项目不会'不会被插入。有人能告诉我为什么会这样吗?

是否有任何关于使用 .FromSql() 或“在 Entity Framework 核心中使用 Postgres 函数”的好文章(我猜这是一个新功能,这就是为什么我不能找到很多这方面的数据)?

最佳答案

Can some one tell me why the second command is not working? Also even if the first command is working, is it the right way?

这根本不是 PostgreSQL 语法的工作方式。 选择 insert_blog({0}) 确实是正确的方法。

Since I have to write .FromSql(...).Count() in order for it to work. If I remove ".Count()" item doesn't get inserted. Can someone tell me why this is happening?

FromSql 的行为就像 WhereIQueryable 上的其他函数。执行被推迟到请求结果之前,因为它将尝试在一个数据库查询中完成所有事情。

为了确保您的查询真正得到执行,您需要调用一个返回除 IQueryable 之外的东西的方法,例如 .Count().ToList ()。更多信息可以在这里找到:https://learn.microsoft.com/en-us/ef/core/querying/overview#when-queries-are-executed

关于postgresql - EF Core FromSQL 查询不会立即执行 (PostgreSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com