2017-08-16 68 views
0

因此,我正在編寫一個會計應用程序,其中每個用戶可以有多個業務,因此應用程序有多個「版本」。 我已經在SQL Server中添加了一個業務表,並且所有其他表都有一個BusinessId。 我目前獲取當前businessId像這樣的控制器:實體框架ASP.Net MVC直接從實體模型返回所需的記錄

public int CurrentBusiness 
{ 
    get 
    { 
     return db.AspNetUsers 
       .Find(User.Identity.GetUserId()) 
       .CurrentBusiness 
       .Value; 
    } 
    set { } 
} 

然後我使用LINQ,語句返回相關的記錄:

db.Invoices.Where(x=>x.BusinessId == CurrentBusiness); 

我只是想知道這是否是可以直接在我的實體模型編寫代碼,所以我就可以這樣寫:

db.Invoices; 

,並返回與BusinessId發票爲當前用戶。

回答

0

根據理解CurrentBusiness包含收據的發票。

如果你是lazyloading配置比所有的發票也將被包含在CurrentBusiness變量,只需調用像

var invoices = CurrentBusiness.Invoices . 

如果不是你可以明確地包括同時接入使用DB包括擴展方法。像

var business = db.Business.Include(b => b.Invoices).Where(b => b.UserId == User.Identity.GetUserId()).FirstOrDefault(); 

希望我解決您的問題。你應該通過調試來玩。

問候, FB

1

爲當前用戶是通過ASP管理這是不可能的。我認爲您應該在用戶登錄時添加索賠,以便您不必每次都查詢用戶的CurrentBussiness

進一步移動您可以創建一個基於用戶的當前業務返回發票的方法。

public List<Invoice> GetUserInvoice(int businessId) 
{ 
    return db.Invoices.Where(x=>x.BusinessId == businessId); 
} 

OR

public List<Invoice> GetUserInvoice() 
{ 
    int businessId = currentUserBusinessId;// get this line from user Claim. 
    return db.Invoices.Where(x=>x.BusinessId == businessId); 
} 

好運和快樂編碼。 :)