【问题标题】:C#; EF database first modeC#; EF 数据库优先模式
【发布时间】:2021-03-22 07:48:37
【问题描述】:

我在 EF 中使用了数据库优先模式。我需要您的帮助,因为我在尝试运行此代码时遇到了问题:

private void btnSearch_Click(object sender, EventArgs e)
{
    string SNumber = txtSearchByNum.Text;
   
    var qSearchByTypeText = database.tblNote.SqlQuery("select * From tblNote Where fNumber=@t0", SNumber).ToList();
}

我收到此错误:

System.Data.Entity.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

附加信息:必须声明标量变量“@t0”。

这可能是由于 ٍEntity Framework 版本的原因吗?

【问题讨论】:

  • 您使用的是哪个版本的实体框架?
  • 为什么要使用 sql 字符串来完成 Entity Framework 能够做的事情? var qSearchByTypeText = database.tblNote.Where(note => note.fNumber == SNumber).ToList();
  • 实体框架6.0.0
  • 这不是 EF 的问题。您必须在命令中声明标量变量"@t0".
  • 最简单的答案是不要...正如 Andrew 指出的那样,您完全忽略了使用 ORM 的意义。 EF 和 Linq 将为您解决所有这些问题。鉴于您的示例,绝对没有理由编写 SQL。

标签: c# entity-framework entity-framework-6 db-first


【解决方案1】:

你需要传递如下参数:

var qSearchByTypeText = database.tblNote.SqlQuery("select * From tblNote Where fNumber=@t0", new SqlParameter("@t0", SNumber)).ToList();

【讨论】:

【解决方案2】:

如果您要求使用 EF6.0“使用”语句来包含创建并返回行列表的 EF/ORM 查询,我会这样做:

var qSearchByTypeText = new List<Note>();  //where "Note" is a data structure that looks like a row of columns in "tblNote".

using (var myDbEntity = new [your 'Database First' Entity name]())
{
   //then your query
   qSearchByTypeText = (from n in myDBEntity.tblNotes where n.fNumber == SNumber select n).ToList();

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2020-05-22
    • 2011-04-17
    • 1970-01-01
    • 2015-12-07
    • 2012-03-04
    • 2012-04-27
    相关资源
    最近更新 更多