【发布时间】:2018-09-26 13:52:43
【问题描述】:
我正在尝试使用Object.Equal() 使用现有对象进行查询。
例如
假设我有一个名为Term 的类。
我已经创建了下面的对象。
var term = new Term() {Code = "Plant - weed variety" };
此外,在课堂术语中,我将Equals 方法重写为如下:
public override bool Equals(object obj)
{
return Equals(obj as Term);
}
private bool Equals(Term t)
{
return t != null && t.Code == Code;
}
但是当我执行下面的代码时它返回 null。
var dbTerm = context.Term.Where(t => t.Equals(term));
当我查看SQL Profiler时,我发现在SQL端执行的查询是:
exec sp_executesql N'SELECT TOP(1) [c].[pk], [c].[code], [c].[created_by], [c].[creation_date], [c].[description], [c].[hash_code], [c].[id], [c].[last_updated_by], [c].[last_updated_date], [c].[legacy_id_from_source], [c].[name], [c].[scope_pk], [c].[status_pk], [c].[vocabulary_pk]
FROM [term] AS [c]
WHERE @__term_0_Pk = [c].[pk]',N'@__term_0_Pk bigint',@__term_0_Pk=0
问题是:为什么查询被翻译成使用PK 而不是代码的地方?
谢谢
【问题讨论】:
-
因为 Entity Framework 忽略了您的
Equals以生成 SQL。您可能想使用var code = term.Code; var dbTerm = context.Term.Where(t => t.Code == code); -
只是添加到@mjwills 的评论中,看来这种行为将在 EF7 (blogs.msdn.microsoft.com/adonet/2014/10/27/ef7-v1-or-v7) 中发生变化
标签: c# .net entity-framework linq