我想为 View 创建参照完整性。我知道这在数据库中是不可能的,但使用 EF 我正在寻找一种方法来实现这一目标。
情况是这样的:
View (vSkillMatch
) 包含三列:jobid、matchingskillid、candidateid。
这些分别来自JobDescription
、SkillInfo
和Candidate
表。
我想从我的 web api 返回以下字段:
职位,工作地点,候选人姓名,手机号码,匹配技能名称
这些字段在各自的表格中可用。
目前我是这样做的:
网络接口(interface)方式
public List<CandidateBySkillDTO> getCandidate()
{
var SkillMatches = db.vSkillMatches;
List<CandidateBySkillDTO> cbsDTO = new List<CandidateBySkillDTO>();
foreach (vSkillMatch Match in SkillMatches)
{
CandidateSkillDTO CandidateSkillInfo = new CandidateSkillDTO(Match.CandidateId, Match.SkillId);
CandidateBySkillDTO candidateList = new CandidateBySkillDTO();
candidateList.candidateId = CandidateSkillInfo.candidateInfo.Id;
candidateList.candidateMobile = CandidateSkillInfo.candidateInfo.PrimaryMobile;
candidateList.SkillName = CandidateSkillInfo.skillInfo.SkillName;
cbsDTO.Add(candidateList);
}
return cbsDTO;
}
CandidateBySkillDTO 模型类
public class CandidateBySkillDTO
{
public int candidateId { get; set; }
public string candidateName { get; set; }
public long candidateMobile { get; set; }
public string createdBy { get; set; }
public string SkillName { get; set; }
public int skillId { get; set; }
public string jobTitle { get; set; }
public string jobCreated { get; set; }
}
CandidateSkillDTO 模型类
public class CandidateSkillDTO
{
ubietydbEntities db = new ubietydbEntities();
public int candidateId;
public int skillId;
public CandidateSkillDTO(int CandidateId, int SkillId)
{
this.candidateId = CandidateId;
this.skillId = SkillId;
}
public Candidate candidateInfo
{
get
{
return db.Candidates.Find(this.candidateId);
}
set
{
}
}
public Skill skillInfo
{
get
{
return db.Skills.Find(this.skillId);
}
set
{
}
}
}
我觉得我的要求不是很适合我的项目。这是完成任务的唯一方法,还是我缺少 EF 的主要功能来执行此任务?
谢谢。
最佳答案
整个事情可以在一个单一的数据库查询中完成(因此可能更快):
public List<CandidateBySkillDTO> getCandidate()
{
return db
.vSkillMatches
.Select(e => new
{
candidateInfo = db.Candidates.FirstOrDefault( c => c.Id == e.candidateId),
skillInfo = db.Skills.FirstOrDefault(s => s.Id == e.skillId)
})
.Select(e => new CandidateBySkillDTO
{
candidateId = e.candidateInfo.Id,
candidateMobile = e.candidateInfo.PrimaryMobile,
SkillName = e.skillInfo.SkillName
})
.ToList();
}
关于c# - Entity Framework 和 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34631786/