2011-09-16 82 views
0

我的控制器代碼:.NET MVC3實體比較深在哪裏

public ViewResult Index(int? ProjectID) 
    { 
     var user = HttpContext.User; 
     User profile = db.Users.Where(d => d.Email == user.Identity.Name).Single(); 
     var contracts = db.Contracts.Include(c => c.Project); 
     if (!user.IsInRole("Admin")) 
     { 
      contracts = contracts.Where(p => p.Project.Client == profile.Client); 
     } 

     if (ProjectID != null) 
     { 
      contracts = contracts.Where(u => u.ID == ProjectID); 
     } 

     return View(contracts.ToList()); 
    } 

這是假設拉起所有的父項目具有相同的客戶端FK爲用戶當前除非他們簽訂合同是管理員。這不起作用。

我收到以下錯誤,當非管理員的看看網頁:

無法創建 型「MembershipExt.Models.Client」的恆定值。在此上下文中僅支持基本類型(如Int32, 字符串和Guid)。

我需要使用第二個include還是其他?

回答

1
contracts = contracts.Where(p => p.Project.Client == profile.Client); 

我猜測問題出在上述行拉姆達的右側必須是簡單的類型,它是int32的,string等,但你有一個複雜的類型,即p.Project.Client

1

這看起來錯

db.Users.Where(d => d.Email == user.Identity.Name) 

看起來像您正在使用的名字

+0

這實際上是對。我已經設置好帳號的用戶名是該用戶的電子郵件地址。我正在查看調試,它顯示user.Identity.Name是一個電子郵件地址。 – lovefaithswing

+1

許多站點使用電子郵件地址作爲用戶名,而ASP.NET的內置成員資格提供程序不區分(或關心)該格式。 Identity.Name可以是任何字符串。 –

+0

Ahh ..在我的項目中,我剛剛實現了我自己的登錄/用戶機制,因爲我並不需要所有角色等(和我的db中的大量表) – MoXplod

2

什麼是p.Project.Client數據類型比較電子郵件?我猜這是一個複雜的類型(它具有屬性)。也許你想要的是這樣的...

contracts = contracts.Where(p => p.Project.Client.ClientID == profile.Client.ClientID); 

很明顯,我不知道對象是什麼樣子,但也許這有助於。