gpt4 book ai didi

sql - 如何在没有 EF 的 ASP.NET MVC 中使用普通 sql?

转载 作者:行者123 更新时间:2023-12-04 23:28:24 25 4
gpt4 key购买 nike

我有这个类使用 linq to sql,如何在不使用 EF 的情况下在 ASP.NET MVC 3 中使用普通 sql 来实现?

public ActionResult Index()
{
var List = (from c in db.OFFICE
join s in db.CAMPUS_UNIVERSITY on c.IdCampus equals s.IdCampus
join u in db.UNIVERSITY on s.IdUniversity equals u.IdUniversity
select u).ToList();

return View(List);
}

最佳答案

这只是一个示例。(经过测试和工作)。也就是说,我将 GetUniversities 方法保留在 Controller 类中。我建议您将 GetUniversities 方法移动到某个服务层,以便许多 UI/ Controller 可以使用它。

    public ActionResult Index()
{
var items= GetUniversities();
return View(items);
}

private List<DataRow> GetUniversities()
{
List<DataRow> list=null;
string srtQry = "SELECT U.* FROM Office O INNER JOIN
CampusUniversity CU ON O.IdCampus equals CU.IdCampus
INNER JOIN UNIVERSITY U ON U.IdUniversity=CU.IdUniversity";
string connString = "Database=yourDB;Server=yourServer;UID=user;PWD=password;";
using (SqlConnection conn = new SqlConnection(connString))
{
string strQry = "";
using(SqlCommand objCommand = new SqlCommand(srtQry, conn))
{
objCommand.CommandType = CommandType.Text;
DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(objCommand);
conn.Open();
adp.Fill(dt);
if (dt != null)
{
list = dt.AsEnumerable().ToList();
}
}
}
return list;
}

请记住,GetCustomers 方法返回一个 DataRows 列表。不是您的自定义域实体。 Entity Framework 为您提供域实体列表。因此,在自定义 SQL 案例中,您需要自己将 Data Row 映射到自定义对象的实例。

使用 LINQ,您可以像这样将 DataRow 列表转换为您的自定义对象

public ActionResult Index()
{
var items= GetCustomers();

var newItems = (from p in items
select new
{
Name= p.Field<String>("Name"),
CampusName= p.Field<String>("CampusName")
}).ToList();

return View(newItems);
}

这会给你一个匿名类型的列表,它有 2 个属性,NameCampusName。假设 Name 和 CampusName 是查询结果中的 2 列。

EDIT2:根据评论,要在 View 中列出这些数据,在 Views 文件夹下的 Controller (我们编写此操作方法的地方)文件夹中创建一个名为 Index 的 View 。我们需要制作它是一个强类型 View 。可是等等!我们要传递给 View 的类型是什么?

我们的结果是匿名类型。因此,在这种情况下,我们将创建一个 ViewModel,而不是匿名,我们将返回 ViewModel 的列表。

public class UniversityViewModel
{
public string UniversityName { set;get;}
public string CampusName { set;get;}
}

现在我们将像这样更新索引操作中的代码。

var newItems = (from p in items
select new UserViewModel
{
UniversityName = p.Field<String>("Name"),
CampusName = p.Field<String>("CampusName")
}).ToList();

唯一的变化是我们现在在这里提到了一个类型。所以输出不再是匿名类型。但已知类型。

让我们回到我们的 View 并像这样编写代码。

@model IEnumerable<SO_MVC.Models.UserViewModel>
@foreach (var item in Model)
{
<p>@item .UniversityName @item.CampusName</p>
}

这个 View 被强类型化到我们的 ViewModel 的集合中。像往常一样,我们正在循环播放并显示。这应该可以正常工作。它已经过测试。

关于sql - 如何在没有 EF 的 ASP.NET MVC 中使用普通 sql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10487202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com