【问题标题】:How to access further properties of a table using nav properties of EF如何使用 EF 的导航属性访问表的更多属性
【发布时间】:2019-09-19 17:14:27
【问题描述】:

我有学生和成绩表,有一对多的关系

Student
======
stud_id (pk)
stud_name
grade_id(fk)

Grade
=====
grade_id
grade_name

我的模型/实体类如下

Student
======
public int stud_id {get; set;}
public string stud_name {get; set;}
public int grade_id(fk) {get; set;}
public Grade grade {get; set;}

Grade
=====
public int grade_id {get; set;}
public string grade_name {get; set;}
public ICollection<Student> students {get; set;}

我有一个 DOT 类来处理 LINQ 查询

StudentDomain
============
public int stud_id {get; set;}
public string stud_name {get; set;}
public int grade_id(fk) {get; set;}
public Grade grade {get; set;}

在我的 DataAccessRepository 类中,我有一个方法

public IEnumerable<StudentDomain> GetStudent(int stud_id)
{
var result=  from st in db.Student
         join gr in db.Grade on st.grade_id==gr.grade_id
        select new StudentDomain
           {
              stud_id= st.stud_id,
              stud_name= st.stud_name,
               grade_id= gr.grade_id
                //here I want to add grade name just to display for the 
user but not to store in the database table
           }
return result.ToList();

}

我想在浏览器中显示与年级 ID 对应的年级名称,但我不希望它存储在数据库表中。如何获得对年级名称的访问权限?

【问题讨论】:

  • 首先:加入时必须使用equals,而不是==。第二:为什么只选择它会被存储?
  • 感谢使用equals 而不是== 的建议,但我不明白你为什么选择它会被存储,我不想将它存储在我的数据库中,我只想显示等级名称而不是等级ID
  • 我只是说:它不会存储在您的数据库中。你是从哪里得到这个想法的?

标签: c# asp.net-mvc linq entity-framework-6


【解决方案1】:

我认为你对 linq 查询有误解,你不应该通过 linq 查询存储任何东西,只需将gradename 属性放在你的 StudentDomain 类中,如下所示

StudentDomain
============
public int stud_id {get; set;}
public string stud_name {get; set;}
public int grade_id(fk) {get; set;}
public int grade_name {get; set;}

像这样填写

public IEnumerable<StudentDomain> GetStudent(int stud_id)
{
var result=  from st in db.Student
         join gr in db.Grade on st.grade_id==gr.grade_id
        select new StudentDomain
           {
              stud_id= st.stud_id,
              stud_name= st.stud_name,
               grade_id= gr.grade_id
               grade_name=gr.grade_name
           }
return result.ToList();

}

【讨论】:

  • 如果我这样做,我得到了我需要的一切。我不知道我可以在其他模型类中重复grade_name 属性,而在它自己的模型类中已经提到它是等级并且导航属性已经设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
相关资源
最近更新 更多