簡體   English   中英

在ASP.NET MVC中使用實體框架進行數據訪問

[英]Data access using Entity Framework in ASP.NET MVC

我有一個包含這些列(類型)的表,如下所述。

------------------------------------------------------------------
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 Context和類。

PlotXYContext.cs

public class PlotXYContext :DbContext
{
    public DbSet<PlotXY> XYCells { get; set; }
}

PlotXY.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時也掛在DB Context上。 如果您正確添加了Ado.Net實體數據模型,則應為您自動創建db上下文。 如果查看“ Entity” .edmx =>“ Entity” .Context.tt下的“ YourEntity” .cs文件,它將看起來像

public partial class VuittonEntities : DbContext
{
    public VuittonEntities()
        : base("name=VuittonEntities")
    {
    }

為了幫助您使用EF,我將發布所有代碼進行查詢。

因此,您在models文件夾中的Model類將看起來像。

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; }
}

這是您的數據訪問層函數:在這里,我將創建模型類的列表,因為稍后將在gridview中填充它。

 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();

        }
    }

在您的控制器中,您可以這樣稱呼它。 通常,您會從您的控制器調用一個businezz層,我直接進入Data層,向您展示它是如何完成的。 在這里,var角色保存您的查詢。 我在這里使用Json結果,但是這也可以在動作結果中完成

公共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();
        }
    }   

我發現我沒有使用與表中類似的數據類型來為其聲明類,這是我遇到的唯一解決它的問題,因此是錯誤的。

感謝您的所有答復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM