2014-02-14 126 views
0

我想为自己创建一个ebank,所以它不是那么严重。这是我的结构: http://i60.tinypic.com/rig0sx.pngAsp .net mvc 4特定的“select ....”命令

我取得了什么至今:如果用户登录,并点击Ebank ActionLink的,对他/她,我显示的所有数据(我的意思是如果登录用户id = = 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”行是我必须改变,如果我是正确的。如果我把一个断点“返回视图(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 select?
  2. 如果是,如何?
  3. 在这种类型的编程之后,我可以在哪里阅读?
  4. 我想将此代码更改为“select ... where userid == websecurity。CurrentUserId”,请帮助我解决这个问题吗?
  5. 还有什么想法,建议我应该采取或读取?你越说越多,我可以学习!
+0

欢迎来到LINQ世界,您可以使用'DBQuery'运行sql脚本。结帐这个 - > http://msdn.microsoft.com/en-us/data/jj592907.aspx –

+0

你应该谷歌术语“对象关系映射器”。这回答了你所有的问题。 –

回答

1

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

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

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

你看到的SQL是 '真正的'(没有在花括号{}) - 一旦你查看表格和派生表格的相当恼人的别名为[Extentxxx],它将允许你快速检查你的Linq表达式是否正在执行所需的查询。