【发布时间】:2016-05-13 20:47:28
【问题描述】:
我必须找到一种方法来找出与 EF 交互时生成的 SQL SELECT 是什么。我找到了描述它的 MSDN 在线帮助 ObjectQuery.ToTraceString Method() 并且我确信我已经完全遵循了这个例子,但是它失败了。我收到以下错误:
CS1503 Argument 2: cannot convert from 'string' to
'System.Linq.Expressions.Expression<System.Func<ResearchTableUpdates.Model.Template, bool>>'
我不明白为什么会收到此错误。以下是产生错误的代码:
using (var db = new MyDbContext())
{
int idNum = 1;
ObjectQuery<Model.Template> oqTemplate = db.Templates.Where("it.ID = @idNum");
oqTemplate.Parameters.Add(new ObjectParameter("idNum", idNum));
Console.WriteLine(oqTemplate.ToTraceString());
MyDbContext 是我定义的一个类。这是它的定义:
public class MyDbContext : Model.CoreFrameworkEntities
{
public override int SaveChanges()
{
var modifiedEntities = ChangeTracker.Entries()
.Where(p => p.State == EntityState.Modified)
.Select(p => p.Entity);
foreach (var modified in modifiedEntities)
{
Console.WriteLine();
//modified.LastModifiedAt = now;
Console.WriteLine(modified.ToString());
Console.WriteLine();
}
return base.SaveChanges();
}
}
最后,Model.CoreframeworkEntities 是一个定义为创建 .edmx 文件的 EF 模型。它是 .edmx 中的实体之一。 (据我了解,.edmx 文件中定义的任何实体都是 DbContext 数据类型。现在,如果这是错误的,我很想知道。)
我不确定我为什么会收到我的错误。在我看来,好像我已经在代码中遵循了 MSDN 文章。要么 MSDN 文章不再有效,要么我犯了一个错误,可能在我对 entity-relationship/.edmx 文件中的实体的理解中。
【问题讨论】:
标签: c# .net entity-framework linq