c# - Entity Framework 和 View

标签 c# entity-framework

我想为 View 创建参照完整性。我知道这在数据库中是不可能的,但使用 EF 我正在寻找一种方法来实现这一目标。

情况是这样的:

View (vSkillMatch ) 包含三列:jobid、matchingskillid、candidateid。

这些分别来自JobDescriptionSkillInfoCandidate 表。

我想从我的 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/

相关文章:

c# - 如何在 Linq 中订购日期?

c# - ASP.NET HttpModules 和 Server.Transfer/Server.TransferRequest/RewritePath 问题

c# - 有没有办法只向特定用户/组公开 .Net Web 服务中的特定 Web 方法?

c# - ASP.NET Core - 无法在 Controller 内使用 C# StreamReader 读取静态 HTML 文件

c# - 在 Silverlight 项目中引用 .Web 项目时出现问题

c# - 字段列表中的 ASP.NET EF 数据库第一个 4.1 EDMX Extent1.XXX

c# - 在 Entity Framework 中有两个代表同一个表的类?

c# - 在 ASP.NET 页面中将项目从一个列表拖放到另一个列表?

entity-framework - Entity Framework 4 CTP 5 POCO - 多对多配置、插入和更新?

c# - Automapper 多对多映射