2013-05-19 57 views
1

我正在將現有項目DAL中的一個升級爲實體框架。在學習DAL時,我喜歡例如來自參數化構造器的實體框架加載實體

public class User{ 
    public User(){} 

    // This constructor loads data from database where UserID is found 
    public User(int UserID){} 

} 

那麼,如何實現這EF即當我傳遞參數的構造函數的用戶ID應該填充從數據庫中的用戶實體?

回答

0

使用EF中的Repository抽象模式進行研究。事實上,如果你有一個現有的DAL,也可以查看EF的邏輯工作單元抽象模式示例。你很可能需要它。

0

實體框架對象需要默認構造函數。

爲了解決這個問題,你可以綁定上下文的ObjectMaterialized事件。

Context.BaseObjectContext.ObjectMaterialized += ObjectContext_OnObjectMaterialized; 

private void ObjectContext_OnObjectMaterialized(
    object sender, 
    ObjectMaterializedEventArgs e) 
{ 
    //e.Entity is the newly created object 
    //you can cast it and call into it to do any initilisation etc. 
} 
1

當我傳遞參數的構造函數的用戶ID應該填充用戶實體

貌似轉向實體框架也需要轉變。你習慣於Active Record或類似的。當你與EF工作的一個重要概念是,實體(即類,如User)是持久性無知

的背景是負責從數據庫中物化實體對象,跟蹤其變化,並保存更改。實體本身並不參與其中。

所以你的情況,你會不再得到User通過

var user = new User(1); 

using(var context = new MyContext()) 
{ 
    var user = context.Users.Find(1); 
    // in ObjectContext: context.Users.Single(u => u.UserId == 1) 
} 

它看起來更精細這種方式,但現在User是一個簡單的POCO(如果你先工作代碼)。它的內部沒有什麼是傳統的DAL必須具備的。

+1

+1正確閱讀問題! – qujck