2009-07-23 57 views
0

我正在使用實體框架作爲我的ORM爲ASP.Net(webforms)應用程序。假設我在應用程序中有一個「list/detail」頁面集,當你點擊列表頁面中的一行時,我想將該行的某種類型的ID傳遞給一個詳細信息頁面,然後我會使用它從我的數據層加載行。在我的具體情況中,主鍵只是一個「rowId」標識列。我將如何唯一標識實體框架中的實體?

但是,EF似乎更喜歡「隱藏」主鍵/外鍵,因此您無法訪問它們(默認情況下)。

我是EF新手,想知道是否有一個最佳實踐來唯一標識實體上下文之外的行。我想我可以添加一個uniqueidentifier列到我的記錄和一個匹配的屬性到我的實體模型,但似乎是多餘的有效地有2個唯一的標識符的行。是否有更好的方法在表示層帶出標識符?

在我_ItemDataBound()事件處理程序,我想我可以這樣做:

var announcement = (Announcement) e.Item.DataItem; 
string rowID = announcement.EntityKey.EntityKeyValues[0].Value.ToString(); 

是這個建議,或者只是對工作的框架?

在此先感謝。

Scott

回答

1

不,你在做什麼不是「針對(實體)框架」。然而,這並不是說它不能改進:

  1. 我知道這不是MVC,但即使在WebForms中,我仍然認爲在數據層和Web之間有一些區別是個好主意頁面。我可能會在此處使用Repository模式和演示模型,而不是直接向頁面提供實體框架的知識。
  2. 由於您已將公告轉換爲適當的類型,因此您可以直接訪問ID值,而不必通過EntityKey。那麼,至少,你的頁面只知道公告而不是實體框架。
  3. 當前的代碼假定存在一個EntityKey(並非總是爲真,特別是對於尚未提交到數據庫的新插入的實體),並且它只有一列。測試這些推定並拋出一個有意義的異常,而不是讓它們在被違反時用空引用放大是一個好主意。
+1

實現存儲庫模式實際上將是我的下一個重構:)我不知道我在哪裏得到了.RowID屬性不會被我使用的印象......這適用於我在這種情況下。 #3的好處...我是EF新手,感覺我應該做什麼,不應該做什麼。 – 2009-07-23 17:11:09