到目前为止,我知道两种查询数据库的方法。其中一个是使用MySQL的库;通过声明“MySqlCommand”,“MySqlDataReader”,“MySqlConnection”并使用内置方法。
另一个是通过使用实体框架(这是我的首选选项)。
然而,我对这个后来的方法遇到了一些问题。我个人认为我缺乏知识。似乎在向最终用户传送数据时,Entity-Framework倾向于ObservableCollection<>或列表<>。对我来说,这意味着在View中,我将使用Datagrid或List控件。通常这没关系。
但是,如果我不想在混合中使用数据网格控件会发生什么?如果我想在文本框中传达查询的结果怎么办?如何在不牺牲实体框架使用的情况下执行以下操作?它甚至可能吗?
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();
我如何利用实体框架来做到这一点?
答案 0 :(得分:4)
此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
答案 1 :(得分:3)
尝试类似的事情:
public static Studens GetStudent(int id)
{
return context.Studens.SingleOrDefault(x=>x.Id == id);
}