2013-04-28 59 views
0

當我基於VS2012單頁MVC Web應用程序生成項目時,基礎項目包含大量對DbEntity的引用。爲什麼使用實體框架的DbEntity?

爲什麼:

db.Entry(todoList).Entity.UserId 

,而不僅僅是:

todoList.UserId 

它一再使用這種間接的樣品ApiControllers,但只有一次調用DbEntityEntry特定成員(State屬性)。是否有一些重要的原因使用我忽略的原因?

編輯:這是一個較大的片段

// DELETE api/TodoList/5 
[ValidateHttpAntiForgeryToken] 
public HttpResponseMessage DeleteTodoList(int id) { 
    TodoList todoList = db.TodoLists.Find(id); 
    if (todoList == null) { 
     return Request.CreateResponse(HttpStatusCode.NotFound); 
    } 

    if (db.Entry(todoList).Entity.UserId != User.Identity.Name) { 
     // Trying to delete a record that does not belong to the user 
     return Request.CreateResponse(HttpStatusCode.Unauthorized); 
    } 
+2

看起來像新手冗餘或模式有人偏執分離實體將採取普遍。 – millimoose 2013-04-28 09:25:55

+0

謝謝毫毛。是的,一個獨立的實體更有意義。在這個示例中不可能發生,但是我可以看到,如果我正在忙於控制實現原始實體而不是DTO或ViewModel的控制器操作,那麼這會比沒有實體的實體更容易潛入我的身體。 :)(閱讀爲:「如果我是一個懶鬼,我可以看到這會是一個問題」) – shannon 2013-04-28 09:37:13

回答

2

我相信它的存在,讓你確保你引用數據庫實體,不只是一個實例(模型類的),可能在數據庫中不存在。

+0

由於通過'db.TodoLists.Find()'檢索了對象,這似乎毫無意義。 – millimoose 2013-04-28 09:25:32

+0

那麼這只是一些程序員在構建樣本時練習語義預防?在我看來,由於示例中的數據庫上下文位於實例上,因此即使Find(id)也無法從內存中返回任何內容。 – shannon 2013-04-28 09:26:17

+0

是的,Find()可以返回一個未被執行的實體,但即使它可以(假設我從樣本中修改了DbContext的範圍),那麼我希望它在這個代碼示例中被刪除。 – shannon 2013-04-28 09:27:34