C#没有参数的存储过程

时间:2015-12-21 16:43:23

标签: c# entity-framework stored-procedures

我正在尝试使用从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));

知道我哪里错了吗?

MyDBContext定义

class MontagueDBContext : DbContext, IUnitOfWork 
{ 
    public MontagueDBContext() : base("name=MontigueApp") 
    { 
        AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Directory.GetCurrentDirectory()); 
    } 

    public IDbSet<Permit> Permits { get; set; } 

    public void ChangeEntityState<TEntity>(TEntity item, EntityState entityState) where TEntity : class 
    { 
        this.Entry(item).State = entityState; 
    } 

    public EntityState GetEntityState<TEntity>(TEntity item) where TEntity : class 
    { 
        return this.Entry(item).State; 
    } 

    public new int SaveChanges() 
    { 
        return base.SaveChanges(); 
    } 
}

2 个答案:

答案 0 :(得分:5)

你告诉EF有一个参数(虽然没有名字或值!)。

将您的代码更改为以下内容:

_myDBContext.Database.SqlQuery("MyStoredProcedure");

背景

params关键字是一个特殊关键字,允许方法接受零个或多个参数。

修改

您可以通过各种方式执行原始SQL语句,但这可能是您的方案的最佳选择(执行不返回任何结果且不依赖于特定表的存储过程)。

context.Database.ExecuteSqlCommand("EXEC MyStoredProcedure"); 

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

答案 1 :(得分:0)

也许这样的事情可以帮助..

:slug

为编辑道歉..发布的原始示例是以防从sproc返回的东西......

      private const string SAMPLE_SP_NAME = "dbo.sp_your_sprocname_here";

      ...

      yourDbcontext.Database.ExecuteSqlCommand("EXEC " + SAMPLE_SP_NAME);