使用 MVC 中的实体框架进行数据访问 ASP.NET
本文关键字:数据 访问 ASP NET 框架 MVC 实体 使用 | 更新日期: 2023-09-27 18:32:07
我有一个包含这些列(类型)的表格,如下所述。
桌子
------------------------------------------------------------------
Dir(str) | Twnshp(int) | Rng(int) | Section(int) | Xcell(int) | Ycell(int)
------------------------------------------------------------------
我正在尝试使用 EF 执行此查询。
SELECT Xcell,Ycell FROM [CIR].[dbo].[TRS2Cell] where Twnshp = 1 and Rng = 4 and Section =31
经过一番研究,我创建了一个 DAL 上下文和类,如下所示。
图XYContext.cs
public class PlotXYContext :DbContext
{
public DbSet<PlotXY> XYCells { get; set; }
}
剧情XY.cs
[Table("TRS2Cell")]
public class PlotXY
{
public string Dir { get; set; }
[Key]
public int Twnshp { get; set; }
public int Rng { get; set; }
public int Section { get; set; }
public int Xcell { get; set; }
public int Ycell { get; set; }
}
这是我的控制器中的代码,我在其中传递了三个参数。
PlotXYContext plotXYContext = new PlotXYContext();
var query = from TRS2Cell in plotXYContext.XYCells
where TRS2Cell.Twnshp == 1
&& TRS2Cell.Rng == 4
&& TRS2Cell.Section == 31
select TRS2Cell.Xcell;
我需要有关 EF 的帮助,因为我是新手,这也是正确的查询吗?如果是这样,我如何从查询中检索 Xcell 和 Ycell 值。此外,该表没有唯一列,没有空值,此处无需更新任何内容。我想要的只是做一个选择。
您不希望在控制器中执行任何数据访问代码。你想把他们分开。此外,当我第一次开始使用 EF 时,当我开始使用 MVC 时,我也挂断了数据库上下文。如果正确添加了 Ado.Net 实体数据模型,则应自动为您创建数据库上下文。如果您查看"Entity"下的"您的实体".cs 文件.edmx => "Entity".Context.tt 它看起来像
public partial class VuittonEntities : DbContext
{
public VuittonEntities()
: base("name=VuittonEntities")
{
}
为了帮助您使用 EF,我将发布我的所有代码以进行查询。
因此,模型文件夹中的模型类将如下所示。
public class RoleGridViewModel
{
public int UserID { get; set; }
public string UserFirst { get; set; }
public string UserLast { get; set; }
public string UserRole { get; set; }
public string UserRoleDesc { get; set; }
}
这是您的数据访问层函数:在这里,我将创建模型类的列表,因为我稍后将在网格视图中填充它。
public List<RoleGridViewModel> GridRoles()
{
using (VuittonEntities db = new VuittonEntities())
{
return (from users in db.User
join roles in db.UserRole on users.RoleID equals roles.RoleID
select new RoleGridViewModel
{
UserID = users.UserID,
UserFirst = users.FirstName,
UserLast = users.LastName,
UserRole = roles.Role,
UserRoleDesc = roles.Role_Desc
}).ToList();
}
}
在您的控制器中,您可以像这样调用它。通常你会从控制器调用业务层,我将直接进入数据层向您展示它是如何完成的。在这里,var 角色保存您的查询。我在这里使用 Json 结果,但这也可以在操作结果中完成
public JsonResult RolesGrid() {
var roles = new UserDAL().GridRoles();
return Json(roles, JsonRequestBehavior.AllowGet);
}
如果您只想选择单个项目,则必须使用 .First() 在查询结束时,如下所示...
public string currentRole(UserViewModel uvm)
{
using (VuittonEntities db = new VuittonEntities())
{
return (from us in db.User
join usRole in db.UserRole on us.RoleID equals usRole.RoleID
where (us.RoleID == uvm.RoleID) && (us.UserID == uvm.UserID)
select usRole.Role).First();
}
}
我发现我没有使用与表中类似的数据类型来声明它的类。Thant是我遇到的唯一解决它的问题,因此出现了错误。
感谢您的所有回复。