【发布时间】:2016-12-21 12:31:03
【问题描述】:
我有这个模型:
[Table("tblDbFile")]
public class DbFile
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public string Engine { get; set; }
public string Hash { get; set; }
public long Size { get; set; }
public DbDir Directory { get; set; }
}
[Table("tblDbDir")]
public class DbDir
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public DbDir Parent { get; set; }
}
如果我尝试执行 _context.DbFile.Where(n => n.Directory == Dir) 行,我会收到此错误:
(Dir 是 DbDir 类型)
消息:
InvalidOperationException:没有为类型“System.Nullable`1[System.Guid]”和“Models.DbDir”定义二元运算符 Equal。
我该如何解决这个问题?使用_context.DbFile.Where(n => n.Directory.Id == Dir.Id) 有效,但这对我来说不是一个选项,因为首先,我必须经常使用这些类型的引用,其次,Dir 可能为空。
我已经试过了:
- 覆盖对象的
==和!=运算符,这确实有效,但它不再优化 SQL 查询,而是在 C# 中进行比较。 - 试图将 Dir 声明为
DbDir?(失败) - 使用
n.Directory.Equals(Dir)(与覆盖==的问题相同) - 在表达式中使用
Dir??.Id(失败)
【问题讨论】:
-
这是哪个版本的 EF Core?旧版本中存在可能导致此异常消息的问题,已修复,但可能仍然存在其他问题。这个特殊的异常消息清楚地指出了 EF 中的一个错误:它抱怨您没有执行的特定比较。 EF 的异常消息应该说明 youre 不支持,或者应该适当地翻译它。如果它在最新版本中仍然存在并且尚不为人所知,则可能值得在他们的问题跟踪器上报告。
-
@hvd 7.0.0-rc1-16348
-
7.0.* 是旧版本号,这个版本号在 rc1 之后被删除了。当前版本是 1.1.0。见github.com/aspnet/EntityFramework/releases。在 NuGet 上也可以使用 Microsoft.EntityFrameworkCore 而不是 EntityFramework.Core。
标签: c# asp.net entity-framework entity-framework-core