gpt4 book ai didi

entity-framework - 如何从 Entity Framework 6(数据库优先)和 Npgsql 执行存储过程?

转载 作者:行者123 更新时间:2023-11-29 12:58:51 26 4
gpt4 key购买 nike

这是一个错误吗?

我的组件是:

  1. .NET 4.6.1
  2. Entity Framework 6.0
  3. Npgsql 3.0.5
  4. PostgreSQL 9.5

首先,我在PostgreSQL 9.5中创建了一个表和存储过程

CREATE TABLE hello
(
msg text
)
WITH (
OIDS=FALSE
);
ALTER TABLE hello
OWNER TO postgres;

CREATE OR REPLACE FUNCTION sayhello()
RETURNS SETOF hello AS
$BODY$

select
*
from version()

$BODY$
LANGUAGE sql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION sayhello()
OWNER TO postgres;

其次,我转到 .edmx 文件( Entity Framework 6.0),选择“从数据库更新”,选择新表“hello”和新存储过程“sayhello”。

模型浏览器现在显示新的表实体和导入的函数。

三、向WCF文件中添加新过程:

public string SayHello()
{
using (var ctx = new chaosEntities())
{
var x = ctx.sayhello();
return "Hello";
}
}

将 WCF 服务设置为启动项目并开始调试。

WCF 测试客户端出现。从 WCF 服务执行 SayHello() 会导致:

public virtual ObjectResult<hello> sayhello()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<hello>("sayhello");
}

执行此操作时,我得到:

An exception of type 'System.Data.Entity.Core.EntityCommandCompilationException' occurred in EntityFramework.dll but was not handled in user code

Additional information: An error occurred while preparing the command definition. See the inner exception for details.

Inner Exception is: {"Value does not fall within the expected range."}

由于我有数百个存储过程,因此非常感谢任何有关如何解决此问题的帮助。

TIA

注意:我怀疑问题出在 NpgsqlServices.TranslateCommandTree 上,但我只是猜测。

最佳答案

我永远无法让它按照我希望的方式工作(通过 EntityFramework),所以我最终这样做了。我肯定愿意接受更好的解决方案!

下面的代码直接调用 Npgsql 来避免整个 EntityFramework 的事情。

public string SayHello()
{
using (var ctx = new chaosEntities())
{
var b = ctx.Database.Connection.ConnectionString;

using (var conn = new Npgsql.NpgsqlConnection(connectionString: b))
{
conn.Open();
using (var tran = conn.BeginTransaction())
using (var command = conn.CreateCommand())
{
command.CommandText = "sayhello";
command.CommandType = CommandType.StoredProcedure;

var g = (string)command.ExecuteScalar();
return g;
}
}
}
}

关于entity-framework - 如何从 Entity Framework 6(数据库优先)和 Npgsql 执行存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35681261/

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