【发布时间】:2012-01-23 09:47:05
【问题描述】:
我在 SqlCe 中为以下数据库表创建了实体数据模型:
CREATE TABLE [test_vulnerabilities] (
[id] INTEGER PRIMARY KEY,
[description] NTEXT NOT NULL DEFAULT ''
);
CREATE TABLE [test_software_vulnerabilities]
(
[id] INTEGER PRIMARY KEY IDENTITY,
[vulnerability_id] INTEGER NOT NULL
REFERENCES [test_vulnerabilities]([id]),
[details] NTEXT NOT NULL DEFAULT ''
);
实体(基于现有数据库添加实体模型创建):
entity Vulnerability in set Vulnerabilities
Id int
Description string
Software ICollection<SoftwareVulnerability> - navigation property
entity SoftwareVulnerability in set SoftwareVulnerabilities
Id int
Details string
VulnerabilityId int
Vulnerability Vulnerability - navigation property
并执行以下查询:
var query = (from v in entities.Vulnerabilities.Include("Software")
where v.Id == id && v.Software.Count > 0
select v);
它非常非常慢,因为生成的 SQL 将带有 software_vulnerability 的漏洞与左外连接连接起来。
有什么方法可以简单地说我只想要具有非空软件漏洞的漏洞并且 INNER JOIN 可以吗?
谢谢!
【问题讨论】:
-
我会尝试将 .Count > 0 更改为 .Any()
-
@Wouter de Kort - 它向 SQL 添加了一些代码,但保留了 LEFT JOIN
标签: entity-framework linq-to-entities entity-framework-4.1