Entity framework 实体框架和PostgreSQL:调用存储过程时发生异常
我正在尝试使用Microsoft实体框架连接PostgreSQL数据库 由于npgsql数据库提供程序没有集成到VisualStudio中,我正在使用EdmGen工具从现有数据库生成接口代码 数据库还包括一个用于测试的存储过程:它不接受任何参数并返回void。EdmGen不会为此存储过程生成任何代码,但它包含在生成的ssdl文件中。因此,我编写了一个小工具,它修改了csdl和msl文件,以包括这个过程。 这是三个文件的简化视图: ssdl: 我使用以下代码调用此函数:Entity framework 实体框架和PostgreSQL:调用存储过程时发生异常,entity-framework,stored-procedures,ado.net,npgsql,edmgen,Entity Framework,Stored Procedures,Ado.net,Npgsql,Edmgen,我正在尝试使用Microsoft实体框架连接PostgreSQL数据库 由于npgsql数据库提供程序没有集成到VisualStudio中,我正在使用EdmGen工具从现有数据库生成接口代码 数据库还包括一个用于测试的存储过程:它不接受任何参数并返回void。EdmGen不会为此存储过程生成任何代码,但它包含在生成的ssdl文件中。因此,我编写了一个小工具,它修改了csdl和msl文件,以包括这个过程。 这是三个文件的简化视图: ssdl: 我使用以下代码调用此函数: using (var ct
using (var ctx = new TestContext())
{
ctx.TestFunc();
}
但我有以下例外:
[System.Data.EntityCommandCompliationException]准备命令定义时出错。有关详细信息,请参见内部异常 内部例外是: [系统参数异常]
值不在预期范围内 我不知道这个异常是从哪里来的,因为没有要传递给存储过程或从存储过程传递的值。也许你们能帮我 可能也很重要的几点:
- 这是我的
中的连接字符串:app.config
<connectionStrings> <add name="TestContext" providerName="System.Data.EntityClient" connectionString="metadata=res://Test/Test.Database.Test.csdl|res://Test/Test.Database.Test.ssdl|res://Test/Test.Database.Test.msl; provider=Npgsql; provider connection string="Server=localhost;Port=5432;Database=Test;User Id=xxx;Password=xxx;enlist=true;""/> </connectionStrings>
- 我正在使用以下软件版本:
- Visual Studio Express for Desktop 2012
- npgsql 2.0.11.0
- 我对实体框架和ADO.NET完全陌生,对C#、.NET和Visual Studio也很陌生。所以我可能误解了一些概念
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
<EntityContainerMapping StorageEntityContainer="TestStoreContainer" CdmEntityContainer="TestContext">
<FunctionImportMapping FunctionImportName="TestFunc" FunctionName="Test.Store.TestFunc" />
</EntityContainerMapping>
</Mapping>
public int TestFunc()
{
return base.ExecuteFunction("TestContext.TestFunc");
}
using (var ctx = new TestContext())
{
ctx.TestFunc();
}
<connectionStrings>
<add name="TestContext"
providerName="System.Data.EntityClient"
connectionString="metadata=res://Test/Test.Database.Test.csdl|res://Test/Test.Database.Test.ssdl|res://Test/Test.Database.Test.msl; provider=Npgsql; provider connection string="Server=localhost;Port=5432;Database=Test;User Id=xxx;Password=xxx;enlist=true;""/>
</connectionStrings>