使用实体框架时是不是可以从查询中返回字符串值?
Posted
技术标签:
【中文标题】使用实体框架时是不是可以从查询中返回字符串值?【英文标题】:Is it possible to return string values from a query when using Entity-Framework?使用实体框架时是否可以从查询中返回字符串值? 【发布时间】:2016-09-17 14:10:34 【问题描述】:到目前为止,我知道两种查询数据库的方法。其中之一是使用 mysql 的库;通过声明“MySqlCommand”、“MySqlDataReader”、“MySqlConnection”并利用内置方法。
另一个是通过使用实体框架(这是我的首选)。
但是,我在使用后一种方法时遇到了一些问题。我个人责怪我缺乏知识。似乎在向最终用户传送数据时,Entity-Framework 倾向于 ObservableCollection 或 List。
对我来说,这意味着在视图中,我将使用 Datagrid 或 List 控件。一般这样就好了。
但是,如果我不想在混合中使用 datagrid 控件会发生什么?如果我想在文本框中传达查询的结果怎么办?如何在不牺牲实体框架的使用的情况下执行以下操作?有没有可能?
string config = "server=localhost; userid = root; database = databaseName";
MySqlConnection con = new MySqlConnection(config);
MySqlDataReader reader = null;
// Run the select query
string query = "SELECT * FROM students WHERE id = " +id;
MySqlCommand command = new MySqlCommand(query, con);
con.Open();
reader = command.ExecuteReader();
while (reader.Read())
// Put the results in the appropriate strings so I can databind them
string studentName = (string)reader["studentName"];
string studentNum = (string)reader["studentNum"];
.....
con.Close();
我怎样才能利用实体框架做到这一点?
【问题讨论】:
您可以使用 SingleOrDefault() 而不是 ToList() 或简单地遍历您的 List 结果并将值添加到关联的文本框。 【参考方案1】:此 SQL 查询的 EF 等效项:
// note, that this leads to SQL injections,
// use parametrized queries instead!
"SELECT * FROM students WHERE id = " +id
将是:
var student = context.Students.Find(id) // this will lookup local data as well
或:
var student = context.Students.Single(_ => _.Id == id)
两者都将返回单个 Student
实例,而不是序列/集合,您可以将 UI 绑定到其属性或照常访问它们:
student.StudentName
【讨论】:
好的。这就说得通了。只是一个小细节。我如何访问这些我需要绑定的属性?我知道查询是如何完成的,我看到了context.Students
,但是我如何找到(例如)context.students
中的StudentName
字段?我的意思是在这一切结束时,我仍然需要将值放在字符串或 int 中,对吗?
@Offer:我已经更新了答案。像往常一样调用属性。
就这样。非常感谢。【参考方案2】:
尝试这样的事情:
public static Studens GetStudent(int id)
return context.Studens.SingleOrDefault(x=>x.Id == id);
【讨论】:
不要做.Any
然后.First
- 只做.SingleOrDefault()
为什么不return context.Studens.SingleOrDefault(x=>x.Id == id);
@MantasČekanauskas 谢谢。我已根据您的建议修改了答案。以上是关于使用实体框架时是不是可以从查询中返回字符串值?的主要内容,如果未能解决你的问题,请参考以下文章
提供者未返回 ProviderManifestToken 字符串实体框架
查询的结果从实体框架查询返回相同的 COLUMN_NAME 值,这没有意义