我在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可以吗?
谢谢!
答案 0 :(得分:1)
没有。您无法控制已使用的连接。您可以尝试还原查询:
var query = (from s in entities.SofwareVulnerabilities.Include("Vulnerability")
where s.VulnerabilityId == id
select s);
您将获得针对单个预期漏洞的所有软件漏洞,并且将包含此漏洞。如果您的关系来自软件漏洞已正确配置为强制,则应该使用内连接。
答案 1 :(得分:0)
我认为这可能很慢,因为你正在使用计数。我会尝试.Any()在这里,因为它可能会更快堆