我已经在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 ''
);Entities (基于已有数据库添加实体模型创建):
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 join漏洞与带有左外部联接的software_vulnerability。
有没有什么方法可以简单地说,我只想要非空software_vulnerability的漏洞,内部连接是可以的?
谢谢!
发布于 2012-01-23 18:42:53
不是的。您无法控制已使用的连接。您可以尝试恢复查询:
var query = (from s in entities.SofwareVulnerabilities.Include("Vulnerability")
where s.VulnerabilityId == id
select s);您将获得您的单个预期漏洞的所有软件漏洞,并且该漏洞将被包括在内。如果你的关系来自软件漏洞,被正确地配置为强制的,那么它应该使用内部连接。
发布于 2012-01-23 17:54:05
我认为这可能很慢,因为您正在使用count。我将在这里尝试使用.Any(),因为它可能会更快
https://stackoverflow.com/questions/8969676
复制相似问题