2013-02-07 73 views
1

假設我有一個大的實體,並且想要創建一個典型的CRUD應用程序。用戶不應該有能力保存我的實體的一些字段。如何將它保存在實體中

所以我看到兩種方式來實施變革保存邏輯:從DB

  • 一)

    1. 獲取實體輸出到頁面的所有字段(字段哪個用戶shoudnt變化作爲隱藏輸入)

    2. 以郵寄方式取實體

    3. 連接上下文和保存

    在這種情況下,我需要出去頁無用的領域。這是毫無疑問的。

    b)由DB

    1. 獲取實體輸出到頁面只有必要的字段(字段,讓用戶可以更改),通過郵寄方法

    2. 採取實體

    3. 從數據庫獲取實體

    4. 通過新值填入DB實體和保存

    在這種情況下,我需要做額外的查詢數據庫。所以這對性能不好。

    什麼是正確的方法?

  • 回答

    0

    建議對不同的任務使用不同的ViewModels。如果您想要向用戶顯示Model的某些字段進行編輯,則可以使用EditModel並使用CreateModel來創建和填充數據庫。這樣您就可以避免用戶知道您的數據庫結構,從而確保保護和安全。

    2

    或C):從DB

  • 地圖實體視圖模型只允許領域
  • 後視圖模型與數據回控制器
  • 地圖視圖模型回實體
    1. 獲取實體
    2. 附加並保存。

    編輯: 我強烈建議AutoMapper的映射來來回回

    +0

    +1提及AutoMapper –

    +1

    「Map ViewModel返回到實體」我該怎麼做?我可以在哪裏獲得實體? – Neir0

    +0

    您的實體最終會返回到您的數據庫中,換句話說,它是您的Code first模型中的類,或者您的實體框架模型 –

    1

    有趣的是,我剛看了朱莉·勒曼做了一個視頻中,她幾乎討論了完全相同的問題。您的解決方案都不是她所用的:

    有一個單獨的實體類,其中包含您想要在屏幕上顯示的字段,但仍映射到與常規字段相同的表。然後,只需查詢該DbSet以獲取該實體(僅包含這些字段),然後將更新保存到該實體中即可。

    她在討論在Entity Framework之上實現域驅動設計時提到了這一點。因此,如果您的應用程序中的不同函數具有不同的DbContext,那麼您仍然可以使用您正在使用的DbContext寫入表,但可以限制該上下文可以寫入的字段。

    相關問題