我正在尝试使用从dbcontext继承的类来运行不带参数的存储过程。这是我的代码:
MyDBContext _myDBContext = new MyDBContext(); _myDBContext.Database.SqlQuery("MyStoredProcedure", new SqlParameter());
但这不起作用,因为它正在寻找错误的过载。即使我使用的是字符串,也可以使用object []。
如果我在那里有参数,它就可以工作。我已经用其他存储过程做到了这一点,例如:
IEnumerabletempMyClass = _myDbContext.Database.SqlQuery ( "myStoredProcedure @ID", new SqlParameter("@ID", 5));
知道我要去哪里错了吗?
class MontagueDBContext : DbContext, IUnitOfWork { public MontagueDBContext() : base("name=MontigueApp") { AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Directory.GetCurrentDirectory()); } public IDbSetPermits { get; set; } public void ChangeEntityState (TEntity item, EntityState entityState) where TEntity : class { this.Entry(item).State = entityState; } public EntityState GetEntityState (TEntity item) where TEntity : class { return this.Entry(item).State; } public new int SaveChanges() { return base.SaveChanges(); } }
RB... 5
您正在告诉EF只有一个参数(尽管没有名称或值!)。
将您的代码更改为以下内容:
_myDBContext.Database.SqlQuery("MyStoredProcedure");
所述PARAMS关键字是一个特殊的关键字,它允许一个方法采取零个或多个参数。
您可以通过多种方式执行原始SQL语句,但这可能是最适合您的方案的(执行不返回任何结果且未绑定到特定表的存储过程)。
context.Database.ExecuteSqlCommand("EXEC MyStoredProcedure");
有关更多背景信息和各种替代方法,请参见本文。
您正在告诉EF只有一个参数(尽管没有名称或值!)。
将您的代码更改为以下内容:
_myDBContext.Database.SqlQuery("MyStoredProcedure");
所述PARAMS关键字是一个特殊的关键字,它允许一个方法采取零个或多个参数。
您可以通过多种方式执行原始SQL语句,但这可能是最适合您的方案的(执行不返回任何结果且未绑定到特定表的存储过程)。
context.Database.ExecuteSqlCommand("EXEC MyStoredProcedure");
有关更多背景信息和各种替代方法,请参见本文。