不带参数的C#存储过程

不带参数的C#存储过程,c#,entity-framework,stored-procedures,C#,Entity Framework,Stored Procedures,我试图使用从dbcontext继承的类运行一个没有参数的存储过程。这是我的代码: MyDBContext _myDBContext = new MyDBContext(); _myDBContext.Database.SqlQuery("MyStoredProcedure", new SqlParameter()); 但这不起作用,因为它正在查看错误的过载。即使我使用的是字符串,那么params object[] 如果我有参数在那里,它的工作。我已使用其他存储过程完成此操作,例如: IEnum

我试图使用从dbcontext继承的类运行一个没有参数的存储过程。这是我的代码:

MyDBContext _myDBContext = new MyDBContext();
_myDBContext.Database.SqlQuery("MyStoredProcedure", new SqlParameter());
但这不起作用,因为它正在查看错误的过载。即使我使用的是字符串,那么params object[]

如果我有参数在那里,它的工作。我已使用其他存储过程完成此操作,例如:

IEnumerable<MyClass> tempMyClass =
_myDbContext.Database.SqlQuery<MyClass>(
    "myStoredProcedure @ID",
    new SqlParameter("@ID", 5));
IEnumerable tempMyClass=
_myDbContext.Database.SqlQuery(
“myStoredProcedure@ID”,
新的SqlParameter(“@ID”,5));
知道我哪里出错了吗

MyDBContext定义
类MontagueDBContext:DbContext,IUnitOfWork
{ 
public MontagueDBContext():base(“name=MontigueApp”)
{ 
AppDomain.CurrentDomain.SetData(“DataDirectory”,System.IO.Directory.GetCurrentDirectory());
} 
公共IDbSet允许{get;set;}
public void ChangeEntityState(tenty项,EntityState EntityState),其中tenty:class
{ 
this.Entry(item).State=entityState;
} 
公共EntityState GetEntityState(TEntity项),其中TEntity:class
{ 
返回此.Entry(item).State;
} 
public new int SaveChanges()
{ 
返回base.SaveChanges();
} 
}

您告诉EF只有一个参数(尽管没有名称或值!)

将代码更改为以下内容:

_myDBContext.Database.SqlQuery("MyStoredProcedure");
背景 关键字是一个特殊的关键字,允许方法接受零个或多个参数

编辑 您可以以各种方式执行原始SQL语句,但这可能是最适合您的方案(执行不返回结果且不绑定到特定表的存储过程)


有关更多背景信息和各种备选方案,请参阅。

您告诉EF只有一个参数(尽管没有名称或值!)

将代码更改为以下内容:

_myDBContext.Database.SqlQuery("MyStoredProcedure");
背景 关键字是一个特殊的关键字,允许方法接受零个或多个参数

编辑 您可以以各种方式执行原始SQL语句,但这可能是最适合您的方案(执行不返回结果且不绑定到特定表的存储过程)


有关更多背景信息和各种备选方案,请参阅。

类似的内容可能会有所帮助

      private const string SAMPLE_SP_NAME = "dbo.sp_your_sprocname_here";

      ...

      yourDbcontext.Database.ExecuteSqlCommand("EXEC " + SAMPLE_SP_NAME);
对编辑表示歉意。。发布的原始示例是为了防止从存储过程中返回某些内容

     DbRawSqlQuery<string> sprocReturnOutput =
                    yourDbcontext.Database.SqlQuery<String>("EXEC " + SAMPLE_SP_NAME);
DbRawSqlQuery sprocReturnOutput=
yourDbcontext.Database.SqlQuery(“EXEC”+SAMPLE\u SP\u NAME);

也许像这样的东西会有帮助

      private const string SAMPLE_SP_NAME = "dbo.sp_your_sprocname_here";

      ...

      yourDbcontext.Database.ExecuteSqlCommand("EXEC " + SAMPLE_SP_NAME);
对编辑表示歉意。。发布的原始示例是为了防止从存储过程中返回某些内容

     DbRawSqlQuery<string> sprocReturnOutput =
                    yourDbcontext.Database.SqlQuery<String>("EXEC " + SAMPLE_SP_NAME);
DbRawSqlQuery sprocReturnOutput=
yourDbcontext.Database.SqlQuery(“EXEC”+SAMPLE\u SP\u NAME);

确实有-接受字符串和可选的参数数组。请注意,这需要一个泛型参数,但我假设您在第一段代码中没有显示它,就像在第二段代码中一样。对不起,您能告诉我泛型参数是什么意思吗?我的第二段代码使用了一个特定的参数(我想)。嗯,似乎通过向sqlquery中添加一个随机类,我能够运行它:“_myDBContext.Database.sqlquery(“MyStoredProcedure”);”但我还没有在数据库中测试它是否工作。这很可能会导致运行时错误-您正在告诉EF您的存储过程的结果可以转换为该类型(我假设不是这种情况…),我的存储过程不会返回结果
MyDBContext
没有DbSet参数。我猜它是从DbContext继承来的。当然有-接受一个字符串和一个可选的参数数组。请注意,这需要一个泛型参数,但我假设您在第一段代码中没有显示它,就像在第二段代码中一样。对不起,您能告诉我泛型参数是什么意思吗?我的第二段代码使用了一个特定的参数(我想)。嗯,似乎通过向sqlquery中添加一个随机类,我能够运行它:“_myDBContext.Database.sqlquery(“MyStoredProcedure”);”但我还没有在数据库中测试它是否工作。这很可能会导致运行时错误-您正在告诉EF您的存储过程的结果可以转换为该类型(我假设不是这种情况…),我的存储过程不会返回结果
MyDBContext
没有DbSet参数。我猜它是从DbContext继承而来的。