【问题标题】:ASP/C# from ADO to Entity FrameworkASP/C# 从 ADO 到实体框架
【发布时间】:2017-10-30 23:29:01
【问题描述】:

我看了一些 EF 教程,但我无法弄清楚一些事情。我目前正在使用 ADO 与 SQL 服务器数据库交互的 .net 测试项目。我现在必须将 ADO 部分传递给实体框架。 我目前正在使用 3 层,业务、对象和 DataAcess。

在 DA 中,我有以下查询来更新我网站上的 Employee 表。它可以工作,但我想使用 Linq 将它传递给实体框架。我还有一些类似的插入和选择案例,但我相信一旦我可以对这个进行排序,我就能弄清楚它们。

注意:我已经使用实体框架将我的 DataAccess 类与数据库连接起来,实体列表对象称为 ListEntities。

SqlConnection conn = new SqlConnection();
try
{  
    SqlCommand comm;
    string connectionString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;

    conn = new SqlConnection(connectionString);

    comm = new SqlCommand("UPDATE Employee SET Name=@Name, Lname=@Lname, Age=@Age, Email=@Email, Year=@Year, ColorID=@ColorID, AvatarID=@AvatarID WHERE EmployeeID=@EmployeeID", conn);
    comm.Parameters.Add("@Name",
    System.Data.SqlDbType.VarChar, 70);
    comm.Parameters["@Name"].Value = User.Name;

    comm.Parameters.Add("@Lname",
    System.Data.SqlDbType.VarChar, 70);
    comm.Parameters["@Lname"].Value = User.Lname;

    comm.Parameters.Add("@Age",
    System.Data.SqlDbType.Int);
    comm.Parameters["@Age"].Value = User.Age;

    comm.Parameters.Add("@Email",
    System.Data.SqlDbType.NVarChar, 70);
    comm.Parameters["@Email"].Value = User.Email;

    comm.Parameters.Add("@AYear",
    System.Data.SqlDbType.Int);
    comm.Parameters["@Year"].Value = User.Year;

    comm.Parameters.Add("@ColorID",
    System.Data.SqlDbType.Int);
    comm.Parameters["@ColorID"].Value = User.ColorID;

    comm.Parameters.Add("@AvatarID",
    System.Data.SqlDbType.Int);
    comm.Parameters["@AvatarID"].Value = User.AvatarID;

    comm.Parameters.Add("@EmployeeID",
    System.Data.SqlDbType.Int);
    comm.Parameters["@EmployeeID"].Value = User.UserID;

    conn.Open();
    comm.ExecuteNonQuery();
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    conn.Close();
}

【问题讨论】:

  • 如果您只是要重新抛出异常,请不要捕获它。这样做没有意义。绝对不要对捕获的异常执行throw ex;,您将丢失堆栈跟踪。只需throw;
  • 仅供参考,您可以将这些单行:comm.Parameters.Add("@Name", System.Data.SqlDbType.VarChar, 70).Value = User.Name; 保存集合查找。
  • 不是我问的,但很高兴知道。

标签: c# asp.net sql-server entity-framework linq


【解决方案1】:

我不确定我是否理解你所说的,但我想你想把你提到的这个纯 ADO 翻译成 EntityFramework。我也不确定在这个例子中你使用 EF 的步骤是什么,所以我将列出整个步骤。

1- 您需要使用包管理器安装 entityframework 包(在 3 层上)

2- 您需要创建一个上下文,例如从 DbContext 扩展的 DataContext

3- 创建 DbSet Employee,以及 Employee 类及其属性

public class DataContext : DbContext
{
    public DbSet<Employee> Employees {get; set;}
}

4- 最后进行更新

Employee emp = DataContext.Employees.FirstOrDefault(r=>r.EmployeeID == User.UserID);
emp.Name = User.Name;
emp.Age = User.Age;
...
DataContext.SaveChanges();

【讨论】:

  • 那里的“r”是什么意思?
  • 它被称为 lamda 表达式,这意味着对于每个 ROW 让我获得满足此条件的行:ROW.EmployeeID == User.UserID,您可以放置​​任何您想要的变量,例如 FirstOrDefault( p=>p.EmployeeID == User.UserID)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多