2

如何执行命令,例如:

SELECT * FROM CATS

这表现得就像我做的一样myContext.Cats.Where(c => true);

谷歌建议context.Database.ExecuteSqlCommand(),但返回一个 int。还有 context.Database.SqlQuery 看起来很有希望,但它说返回的实体没有被跟踪,我怀疑这很重要(我不太熟悉 EF 在跟踪事物方面的工作原理)。

它建议使用System.Data.Entity.DbSet<TEntity>.SqlQuery(Object[])来跟踪它,但我不完全确定这意味着什么或如何实现它。

除了让它更加混乱之外,我还想编写一个通用方法来允许我对任何表执行特定的查询。

这是我想要的伪代码的粗略示例

public DbSet<T> ExecuteSelect<T>(DbContext context, string table)
{
     DbSet<T> entities = context.RunSql("SELECT * FROM " + table);

     return entities;
}

有任何想法吗?

4

2 回答 2

2

据此:http: //msdn.microsoft.com/en-us/data/jj592907.aspx您想要以下内容:

public IEnumerable<T> ExecuteSelect<T>(DbContext context, string table)
{
     IEnumerable<T> entities = context.Set<T>.SqlQuery("SELECT * FROM " + table).ToList();

     return entities;
}

myContext.Cats.Where(c => true)返回IQueriable<Cat>(不是 DbSet)

您返回的集合实际上已经完成(例如,您以后不能在查询中添加额外的位),所以让它可查询是误导。

于 2013-06-07T13:04:03.897 回答
0

您可以直接执行sql查询,如下所示:

        private int DeleteData()
    {
        using (var ctx = new MyEntities(this.ConnectionString))
        {
            if (ctx != null)
            {

                //Delete command
                return ctx.ExecuteStoreCommand("DELETE FROM ALARM WHERE AlarmID > 100");

            }
        }
        return 0;
    }

对于选择,我们可以使用

using (var context = new MyContext()) 
{ 
    var blogs = context.MyTable.SqlQuery("SELECT * FROM dbo.MyTable").ToList(); 
}
于 2014-05-26T09:29:48.303 回答