C# 使用实体框架5运行内联SQL并返回跟踪的实体
如何执行以下命令:C# 使用实体框架5运行内联SQL并返回跟踪的实体,c#,entity-framework-5,C#,Entity Framework 5,如何执行以下命令: 从猫中选择* 这就像我做了myContext.Cats.Where(c=>true)一样 Google建议使用context.Database.ExecuteSqlCommand(),但它会返回一个int。还有context.Database.SqlQuery,看起来很有希望,但它说返回的实体没有被跟踪,我怀疑这很重要(我不太熟悉EF在跟踪方面的工作原理) 它建议使用System.Data.Entity.DbSet.SqlQuery(Object[])来跟踪它,但我不完全确定
从猫中选择*
这就像我做了myContext.Cats.Where(c=>true)一样代码>
Google建议使用context.Database.ExecuteSqlCommand()
,但它会返回一个int。还有context.Database.SqlQuery,看起来很有希望,但它说返回的实体没有被跟踪,我怀疑这很重要(我不太熟悉EF在跟踪方面的工作原理)
它建议使用System.Data.Entity.DbSet.SqlQuery(Object[])
来跟踪它,但我不完全确定这意味着什么或者如何实现它
除此之外,我还想编写一个通用方法,允许我对任何表执行特定的查询
下面是一个我想要的伪代码的粗略示例
public DbSet<T> ExecuteSelect<T>(DbContext context, string table)
{
DbSet<T> entities = context.RunSql("SELECT * FROM " + table);
return entities;
}
public DbSet ExecuteSelect(DbContext上下文,字符串表)
{
DbSet entities=context.RunSql(“SELECT*FROM”+表);
返回实体;
}
有什么想法吗?根据这一点:您需要以下内容:
public IEnumerable<T> ExecuteSelect<T>(DbContext context, string table)
{
IEnumerable<T> entities = context.Set<T>.SqlQuery("SELECT * FROM " + table).ToList();
return entities;
}
公共IEnumerable ExecuteSelect(DbContext上下文,字符串表)
{
IEnumerable entities=context.Set.SqlQuery(“SELECT*FROM”+table.ToList();
返回实体;
}
myContext.Cats.Where(c=>true)
返回IQueriable
(非DbSet)
但是
您返回的集实际上已经完成(例如,您以后不能向查询中添加额外的位),因此使其可查询是错误的 您可以直接执行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();
}