2009-08-06 128 views
2

我是實體框架的新手,目前正在嘗試使用它。我創建了一個簡單的數據庫,在VS2008中建立了模型,並且讓代碼使用EF查詢數據庫以及插入新數據。實體框架和臨時對象

雖然有一件事讓我有點困惑。我有一個名爲Customer的實體(在我的模型中設置),作爲我的應用程序邏輯的一部分,我希望能夠爲某些中間處理創建臨時Customer對象。這個特定的對象不應該實際存儲在數據庫中。但是,我注意到,只要我調用SaveChanges(),客戶就會保存到數據庫中。這不是我想要發生的事情。我很樂意在對象I 想要包含的對象上調用AddCustomer() - 我只是想要爲我自己創建一個臨時實例的選項。

我確實發現我可以調用Detach()並傳入我的臨時實例,這會阻止它被持久化。但是我不確定這是做這件事的最好方法,因爲臨時的Customer對象會有相關的對象,除非我經過並分離它們,否則我最終可能會在熱水中結束。

這可能是我誤解EF應該如何工作,或者我錯過了一些明顯的東西 - 我希望有人能夠讓我直線!

感謝

約翰

+0

*凹凸*我有這個確切的同樣的問題 – 2010-12-09 20:38:24

回答

0

如果你想有一個永遠不會被再次連接到EF實體的臨時實例,使用此Entity Cloner用於克隆實體

如果你是試圖斷開一個實體的連接,通過線路將它發送到某個地方(讓我們假設通過服務將它傳遞給客戶端,對其進行修改,然後再次將其取回),然後再將修改合併回EF - 現在這不是直接支持。如何過,你可以嘗試以下解決方案

Entity Bag:

EFContrib (you need PostSharp4EF)

+0

非常感謝那。我實際上是在創建全新的對象而不是克隆它們 - 理想情況下,我希望能夠做到這一點 Customer cust = new Customer(); 沒有永遠不會被放入EF,除非我具體說 entities.AddToCustomer(cust); 我不確定那些鏈接會讓我做這樣的事情嗎? – John 2009-08-06 04:09:13

0

爲什麼不能有相同的字段的另一個Customer類?有一個簡單的解決方案 - -

+0

這是一種可能性 - 但是當我確實需要保留一個臨時對象時,我需要將它轉換爲EF對象。此外,如果我關閉了客戶(例如訂單)的子對象(我正在操作) - 現在我將擁有客戶,訂單,地址等內存版本以及EF版本,這會變得非常狂野。 這確實是一個解決問題的方法 - 但它看起來像很多工作,並且考慮到EF已經爲我設計了這些類,所以我們做了大量不必要的工作! 儘管感謝您的建議。 – John 2009-10-02 19:31:31

0

使用EF4就遇到了這個問題,我有一個服務,你創建新的實體實例後,調用

objectContext.Detach(newEntity);