【问题标题】:Asp .net mvc 4 specific "select ...." commandAsp .net mvc 4 特定的“select ....”命令
【发布时间】:2014-02-14 11:43:16
【问题描述】:

我正在尝试为自己创建一个 ebank,所以这并不严重。这是我的结构:

到目前为止我取得的成就:如果用户登录并点击 Ebank 操作链接,我会为他/她显示所有数据(我的意思是如果登录 userId==1 我也用 userId==2 显示所有数据,这是我要更改的)。

public ActionResult Index()
{

     var bankaccounts = db.BankAccounts.Include(b => b.Type).Include(b => b.Balance).Include(b => b.UserProfile);
     return View(bankaccounts.ToList());

}

如果我是对的,我必须更改此“var bankaccounts”行。如果我在“return view(bankaccounts.ToList())”行设置断点,我会从“bankaccounts”获得以下数据:

    {
SELECT 
    [Extent1].[BankAccountId] AS [BankAccountId], 
    [Extent1].[UserId] AS [UserId], 
    [Extent1].[AccountName] AS [AccountName], 
    [Extent1].[AccountType] AS [AccountType], 
    [Extent1].[AccountNumber] AS [AccountNumber], 
    [Extent1].[AccountStatus] AS [AccountStatus], 
    [Extent1].[AccountAvaiability] AS [AccountAvaiability], 
    [Extent2].[AccountType] AS [AccountType1], 
    [Extent2].[TypeName] AS [TypeName], 
    [Extent3].[BalanceId] AS [BalanceId], 
    [Extent3].[BalanceAmount] AS [BalanceAmount], 
    [Extent3].[TrustAmount] AS [TrustAmount], 
    [Extent4].[UserId] AS [UserId1], 
    [Extent4].[UserName] AS [UserName]
    FROM    [dbo].[BankAccount] AS [Extent1]
    INNER JOIN [dbo].[Type] AS [Extent2] ON [Extent1].[AccountType] = [Extent2].[AccountType]
    LEFT OUTER JOIN [dbo].[Balance] AS [Extent3] ON [Extent1].[BankAccountId] = [Extent3].[BalanceId]
    INNER JOIN [dbo].[UserProfile] AS [Extent4] ON [Extent1].[UserId] = [Extent4].[UserId]}

问题:

我在代码中找不到任何真正的 sql 命令(它是由 mvc 自动生成的),所以如果我是对的

  1. 此“var bankaccounts”行是否执行 sql 选择?
  2. 如果是,怎么做?
  3. 完成此类编程后,我可以在哪里阅读?
  4. 我想将此代码更改为“select ... where userid == websecurity.CurrentUserId”之类的内容,您能帮我解决这个问题吗?
  5. 还有哪些我应该采纳或阅读的想法、建议?你说的越多我能学到的越多!

【问题讨论】:

  • 欢迎来到 LINQ 世界,您可以使用 DBQuery 运行 sql 脚本。结帐 -> msdn.microsoft.com/en-us/data/jj592907.aspx
  • 您应该在 Google 上搜索“对象关系映射器”一词。这回答了你所有的问题。

标签: c# sql-server asp.net-mvc asp.net-mvc-4


【解决方案1】:

您正在使用像实体框架这样的提供程序,它提供从代码到数据库的映射。具体来说:

  1. 在您的情况下,当您使用ToList() 实现查询时,将执行 Sql。在具体化步骤之前,var bankaccountsIQueryable
  2. Entity Framework 有一个 Query 提供程序,它知道如何解析您提供给 Sql 语句的表达式,并且类似地,将结果集映射回像 BankAccount 这样的实体。
  3. Sites like MSDN会给你一个概述
  4. 添加Where 表达式谓词:

var userBankaccounts = db.BankAccounts
                         .Where(ba => ba.UserId == websecurity.CurrentUserId);

您看到的 Sql 是“真实的”(没有大括号 {}) - 一旦您查看表和派生表的相当烦人的别名为 [Extentxxx],它将允许您快速检查您的 Linq 表达式是否执行所需的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 2013-02-27
    • 2014-12-30
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多