【问题标题】:Entity Framework list return all properties to mapped models实体框架列表将所有属性返回到映射模型
【发布时间】:2016-05-15 15:57:34
【问题描述】:

我有三个班级:学生、学科和成绩。

public class Grades
{
    [Key]
    public int Id { get; set; }
    public Student Student { get; set; }
    public Subject Subject { get; set; }
    public int Year { get; set; }
    public string Grade { get; set; }
}

学生班

 public class Student
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string Nationality { get; set; }
    }

学科类

public class Subject
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
}

我想返回所有成绩,但扩展了学生和学科的属性,例如 我可以访问 Grade.Name

Grade.Gender

年级.国籍

年级.年份

Grade.Grade

而不是 Grade.Student.Name

Grade.Student.Gender

Grade.Student.Nationality

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    使用这些表达式来扩展您的数据。请注意,它们不会属于 Grade 类,但它们将是具有您想要的属性的匿名类。如果您需要将这些项目传递给其他方法,则必须创建具有这些属性的显式类。否则,您可以使用相同的方法直接访问它们。比如expandedGrades.First().Name

    var expandedGrades =
        DBContext.Grades.Select(grade =>
        new
        {
            Name = grade.Student.Name,
            Gender = grade.Student.Gender,
            Nationality = grade.Student.Nationality,
            Year = grade.Year,
            Grade = grade.Grade
        });
    

    var expandedGrades =
                    from grade in DBContext.Grades
                    select new
                    {
                        Name = grade.Student.Name,
                        Gender = grade.Student.Gender,
                        Nationality = grade.Student.Nationality,
                        Year = grade.Year,
                        Grade = grade.Grade
                    };
    

    【讨论】:

    • 我不想这样使用...属性应该根据对象动态创建
    • 程序如何决定扩展哪些属性以及如何处理名称冲突?您需要它用于任何课程还是仅用于您所说的课程?在最后一种情况下,您可以在 Grade 类中创建未映射的属性 - public string Name { get { return Student.Name; }}
    • 我已经声明了3个班级,学生,学科,年级。(年级与学科和学生有关系)...您可以识别与班级的关系,请清楚地检查帖子.. .
    • Properties should be created dynamically based on the object是什么意思?
    【解决方案2】:

    假设您在学生、科目和成绩表之间设置了适当的关系。在实体框架中,您可以使用 .include 来完成您的工作。

    一个基本的例子:

    Blog blogs = context.Blogs 
                        .Include(b => b.Posts) 
                        .ToList(); 
    

    现在您可以直接使用blogs.Posts

    参考:https://msdn.microsoft.com/en-in/data/jj574232.aspx

    【讨论】:

    • 我可以访问数据,我的意图是实现像“Grade.Gender”这样的属性而不是“grade.Student.gender”
    • @PrasadRaja 你为什么要那样做?如果你真的想要这样的东西,可以在使用 .Include 和一些 LINQ 之后完成。
    • 某个时间列表会有主数据...在那个管理员将定义属性,基于我需要获取选定的列...。
    猜你喜欢
    • 2016-04-08
    • 2017-09-20
    • 1970-01-01
    • 2012-09-29
    • 2015-01-22
    • 2020-06-26
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多