2011-05-24 15 views
0

我正在創建一個數據庫,用戶可以在其中輸入一些錯誤報告,我們可以查看它們。我在ASP MVC 3 .NET框架中使用C#編寫這些數據庫(如標籤所暗示的)。每個錯誤報告都有一個唯一的ID,稱爲ReportId,因此它們都不存儲在同一個ID下。但是,每當用戶創建一個新的錯誤,我傳遞他們的用戶名並將其與報告的其餘部分一起存儲(我使用User.Identity.Name.ToString()來獲取他們的名字並將其存儲爲字符串)。我知道如何使用lambda表達式,像這樣的數據獲得的單個項目:在ASP .NET MVC中從數據庫中獲取多個項目3

db.DBSetName.Single(g => g.Name == genre) 

上面的代碼是基於ASP提供的MVC 3教程(電影商店之一)。這就是他們如何教我如何去做的。

我的主要問題是:有沒有喜歡的。單一個將貫穿整個數據庫,其存儲的用戶名只能輸出數據庫條目解析一個成員函數相匹配的是,在用戶的當前登錄?然後,我可以使用它來限制用戶只能編輯他們自己的條目,因爲只有他們的條目會被傳遞給用戶的視圖。

什麼是最好的實施方式?由於ReportId不會更改,因此可以創建一個新的數據結構來存儲用戶的錯誤並傳遞到該特定控制器的索引(或主頁)視圖。從那裏,他們應該能夠點擊任何編輯鏈接,它將存儲的ReportId傳遞迴該特定控制器的編輯動作,然後可以搜索整個數據庫。我是否認爲這會起作用?如果數據庫中的其他項目不通過此方法中的索引,這意味着用戶無權訪問其他項目的ReportId,用戶需要將其傳遞給Edit Action它工作?如果這是理想的,這是需要我知道如何解析數據庫並抓取符合特定描述(存儲的用戶名與用戶的當前用戶名匹配)的每個元素的方法。

或者將一個更好的辦法是將整個數據庫傳遞到索引視圖,只輸出具有匹配登錄用戶的當前用戶名值的數據庫條目?我想這可能在foreach循環來完成一個嵌套的循環,如果,像這樣:

@foreach(var item in db.Reports) 
{ 
    if(item.UserName == User.Identity.Name.ToString()) 
    { 
     ...code to output table... 
    } 
} 

但這種通過整個數據庫,爲用戶提供了比他們需要更多的信息。它也使他們有可能訪問我不希望他們擁有的信息。但是,我不必創建一個新的數據結構或數據庫,這會降低服務器內存使用率和獲取時間,對嗎?還是數據庫通過複製傳遞?如果是這樣,這種方法似乎有點愚蠢。但是,我不知道第一種方法是否會潛在破壞數據庫,這肯定不會。另外,不要記得我是否需要C#中的else語句,我更熟悉C++,在那裏你不需要一個,如果需要,你也不需要單行{}。請不要太苛刻地評論我!

小記:我使用,以編輯我的數據庫與實體首先框架做出CRUD控制器。同樣,所有的創建,閱讀,更新和刪除代碼已經提供給我。我選擇不添加這種基本的通用代碼。如果需要,我可以添加它。我將添加編輯動作的樣子:

public ActionResult Edit(string id) 
{ 
    Report report = db.Reports.Find(id); 
    return View(report); 
} 

它接受一個字符串作爲ID,ReportId是使用的ID,它是一個字符串。它是隨GUID.NewGuid()。ToString()函數生成的隨機生成的GUID字符串。我也將做與名稱比較:

Model.UserName == User.Identity.Name.ToString() 

之前顯示的是。對不起,如果這是太多的文字,我想提供儘可能多的信息,不要讓任何人發瘋。如果需要更多的信息,它當然可以提供。所以在帖子結尾,主要的問題實際上歸結爲:上述兩種方法中的哪一種最好?而且,如果它是第一個,我該如何實現類似的東西?

感謝您的幫助!

回答

1

除非我完全誤解你,你只是想.Where()

像這樣:

var reports = db.Reports.Where(r => r.genre == inputGenre); 

這將讓你的Report一個IEnumerable,然後你可以按照自己的喜好使用。

+0

謝謝!完美的作品!我唯一需要添加的就是.ToList(),因爲我將它們存儲在List中。最終代碼我最終使用該工作完美(對於任何人都有同樣的問題): 'List reports = new List (); reports = db.Reports.Where(r => r.UserName == User.Identity.Name).ToList();' 感謝您的禮貌,簡潔的答案。最好的經驗,我有! (對於醜陋的代碼抱歉,我沒有足夠的經驗知道如何在評論中對其進行格式化。) – hjc1710 2011-05-25 14:23:59

相關問題