C# EF 6.x和带表值参数的函数
我有一个DB函数,需要一个表值参数作为参数(@c) 该函数是从EF设计器(首先是数据库)构建的,如下所示:C# EF 6.x和带表值参数的函数,c#,sql-server,entity-framework,sql-server-2012,entity-framework-6,C#,Sql Server,Entity Framework,Sql Server 2012,Entity Framework 6,我有一个DB函数,需要一个表值参数作为参数(@c) 该函数是从EF设计器(首先是数据库)构建的,如下所示: [DbFunction("MyDbContext", "TestTbl")] public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x) { var xParameter = user.HasValue ? n
[DbFunction("MyDbContext", "TestTbl")]
public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x)
{
var xParameter = user.HasValue ?
new ObjectParameter("x", x) :
new ObjectParameter("x", typeof(System.String));
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<TestTbl_Result>("[MyDbContext].[TestTbl](@x)", xParameter);
}
我不知道如何将@c参数传递给函数。有人能帮忙吗
提前谢谢
p、 美国:我使用的是MS SQL 2012(或更新版本)您应该使用另一种方法ExecuteStoreQuery,该方法允许指定表值参数(SqlDbType.Structured)
使用(var table=newdatatable())
{
表.Columns.Add(“cs”,typeof(string));
foreach(项目中的var项目)
table.Rows.Add(item.CD.ToString());
var param1=新的SqlParameter(“@x”,SqlDbType.NVarChar)
{
Value=myValue
};
var param2=新的SqlParameter(“@c”,SqlDbType.Structured)
{
值=表
};
((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery(
“从[TestTbl](@x,@c)”中选择*,参数1,参数2);
}
它可能应该是一个数据表?
[DbFunction("MyDbContext", "TestTbl")]
public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x)
{
var xParameter = user.HasValue ?
new ObjectParameter("x", x) :
new ObjectParameter("x", typeof(System.String));
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<TestTbl_Result>("[MyDbContext].[TestTbl](@x)", xParameter);
}
ex {"An error occurred while executing the command definition. See the inner exception for details."} System.Exception {System.Data.Entity.Core.EntityCommandExecutionException}
ex.InnerException {"An insufficient number of arguments were supplied for the procedure or function TestTbl."} System.Exception {System.Data.SqlClient.SqlException}
using (var table = new DataTable ())
{
table.Columns.Add("cs", typeof(string));
foreach (var item in ITEMS)
table.Rows.Add(item.CD.ToString());
var param1 = new SqlParameter("@x", SqlDbType.NVarChar)
{
Value = myValue
};
var param2 = new SqlParameter("@c", SqlDbType.Structured)
{
Value = table
};
((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<TestTbl_Result>(
"select * from [TestTbl](@x, @c)", param1, param2);
}