Models.Student'不包含'Score'的定义

Posted

技术标签:

【中文标题】Models.Student\'不包含\'Score\'的定义【英文标题】:Models.Student' does not contain a definition for 'Score'Models.Student'不包含'Score'的定义 【发布时间】:2019-06-12 04:11:20 【问题描述】:

我有两张桌子。我的主表名为Student,辅助表为Marks。 Dapper 对我来说是新的。

这是我的代码:

s_idStudent 表中的主键,是Marks 表中的外键(学生(父)- 标记(子))。

控制器:加入

public ActionResult Index()

    string sql ="SELECT TOP 10 * FROM Student AS A INNER JOIN Mark AS B ON A.S_ID = B.S_ID";

    using (SqlConnection connection = new SqlConnection(connectionstring))
    
        var studentDictionary = new Dictionary<int,Student>();
        var list = connection.Query<Student,Marks,Student>
             (
                 sql,(student, marks) =>
                  
                      Student Entry;

                      if (!studentDictionary.TryGetValue(student.S_ID,out Entry))
                      
                          Entry = student;
                          Entry.Marks = new List<Marks>();
                          studentDictionary.Add(Entry.S_ID, Entry);
                      

                      Entry.Marks.Add(marks);

                      return Entry;
                  ,
                splitOn:"S_ID")
               .Distinct()
               .ToList();
                ViewBag.list = list;
      

    return View();

结果.cs

加入模型

public class Result

    public string S_Name  get; set;  //student.cs
    public string S_LName  get; set;  //students.cs
    public int Score  get; set;        //marks.cs
    public string Status  get; set;    //marks.cs

如何使用 result.cs 类访问学生和标记表列?它只访问学生列,为什么标记表列不访问视图侧?

我该如何解决这个问题?

查看:

@model IEnumerable<Dapper2Join.Models.Result>
@
    @foreach (var per in ViewBag.list)
    
        <tr>
            <td>@per.S_Name</td>
            <td>@per.S_LName</td>
            <td>@per.Score</td>
            <td>@per.Status</td>
        </tr>
    

【问题讨论】:

Bad habits to kick : using table aliases like (a, b, c) or (t1, t2, t3) 【参考方案1】:

默认情况下,Dapper 映射按约定工作。您希望您的 Result 类作为仅包含选定列的查询的输出。你犯了两个错误。

    您不必要地返回两个表中的所有列。相反,您可以简单地询问您需要的列。更改您的 SQL 查询 something 如下所示:

    string sql ="SELECT TOP 10 Student.S_Name, ... Marks.Score, .... FROM Student INNER JOIN Mark ON Student.S_ID = Mark.S_ID";
    

    请注意,我不知道您表中的列名。如果与您的属性名称不匹配,您可能需要使用列别名。有关详细信息,请参阅底部的链接。

    您正在映射StudentMarks 类,结果由Query 返回。相反,您可以直接映射您想要的类;即Result。将您的电话更改为Query something,如下所示:

    var list = connection.Query<Result>(sql, .....);
    

除了默认行为,Dapper 还在映射方面提供了更多的灵活性和功能。有关使用 Dapper 进行映射的更多详细信息,请参阅 these two 答案。

【讨论】:

以上是关于Models.Student'不包含'Score'的定义的主要内容,如果未能解决你的问题,请参考以下文章

Django基础五之django模型层单表操作

django----数据库操作

ORM版学员管理系统2

ORM单表查询

ORM版学员管理系统2

如何为包含文档中标题名称的电子邮件创建邮件合并模板?