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_id
是Student
表中的主键,是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";
请注意,我不知道您表中的列名。如果与您的属性名称不匹配,您可能需要使用列别名。有关详细信息,请参阅底部的链接。
您正在映射Student
和Marks
类,结果由Query
返回。相反,您可以直接映射您想要的类;即Result
。将您的电话更改为Query
something,如下所示:
var list = connection.Query<Result>(sql, .....);
除了默认行为,Dapper 还在映射方面提供了更多的灵活性和功能。有关使用 Dapper 进行映射的更多详细信息,请参阅 these two 答案。
【讨论】:
以上是关于Models.Student'不包含'Score'的定义的主要内容,如果未能解决你的问题,请参考以下文章