2016-02-05 62 views
-1

我需要協助;-)老實說不知道該怎麼稱呼它,所以如果人們提出更正確的措辭,我會改變標題以適應。c#推遲保存實施

我已經寫了一個'什麼'類的類就像一個工具類..可以在整個應用程序的許多項目中使用。

在實用程序類中,有一個對EF DB上下文的引用。這是爲了當我想將結果保存到數據庫中。

我想刪除Utility類中的依賴關係,而是傳入save方法。

我在努力弄清楚如何做到這一點。即與C#行動我知道你可以傳遞一個方法來執行,即指向一個函數。但是,如何讓指針瞭解我的實用案例中的內容。

我希望我能正確說明所有的問題,請協助處理一個示例或鏈接到我所關注的內容。

顯示代碼:在這種情況下不確定它的必要性。但這是一個簡單的例子。

public class UtilityCase 
{ 
    public List<Person> Persons = new List<Person>(); 

    public void AddPerson(string name) 
    { 

     Person newPerson = new Person {Name = name}; 
     Persons.Add(newPerson); 

     if (Persons.Count > 10) 
     { 
      PersistClear(); 
     } 

    } 

    public void PersistClear() 
    { 
     //I want to be able to Set this from outside of the UtilityCase 
     var context = new Context(); 

     //I want to remove the referance to the Entity (DB) Person 
     foreach (Person item in Persons) 
     { 
      //add person to db 
     } 
     context.saveChanges(); 

     Persons.Clear(); 
    } 

} 

DB實體的情況下

public class Person 
{ 
    public string Name { get; set; } 
} 

所以我明白,我需要創建一個本地類的實用工具來刪除引用到的人(DB),但如何讓我的功能注入以瞭解UtilityCase中的內容。由於

+0

我一直很難理解你真正想要什麼實現。在我看來,你想要一個PersistClear()方法,它不依賴於Person和Context,這引發了一個問題:爲什麼要把方法放在第一位?你能詳細說明你究竟想要什麼嗎? –

+0

我想注入保存實現...基本上是DDD,並從UtilityCase中刪除類,使其對其他項目具有依賴性...即在這種情況下,它依賴於我的數據層。 – Seabizkit

+0

「PersistClear()」的責任是什麼?只是打電話給你通過的代表? –

回答

2

你需要類似的東西嗎?

//doesn't depends on specific Entity Data Model 
public class UtilityCase 
{ 
    public List<EntityObject> Persons = new List<EntityObject>(); 

    private readonly Action<IEnumerable<EntityObject>> _saveImpl; 

    public UtilityCase(Action<IEnumerable<EntityObject>> saveImpl) 
    { 
     _saveImpl = saveImpl; 
    } 
    ... 

    public void PersistClear() 
    { 
     _saveImpl(Persons); 
    } 
} 

調用它與特定的實體數據模型(上下文)另一個項目:

UtilityCase uc=new UtilityCase((col) => 
{ 
    //I want to be able to Set this from outside of the UtilityCase 
    var context = new Context(); 

    //I want to remove the referance to the Entity (DB) Person 
    foreach (EntityObject item in col) 
    { 
     //add person to db 
     context.Persons.Add((Person)item)); 
    } 
    context.SaveChanges(); 
}); 

PS:不運行,可能含有微小錯誤

+0

ooo我稍後再看這個......但是快看一眼......你是先生。(後來提供了我的雙重支票;-))謝謝你讓我知道。 – Seabizkit

+0

100%我在找什麼!謝謝。明顯修改我的需求..但給了我我在找什麼。非常感謝花時間。 – Seabizkit

0

我不知道你問什麼,但爲什麼你需要所有這些代碼,爲什麼你不能在Person實體添加到集合中Context

var context = new Context(); 
context.Persons.Add(new Person {Name = name}); 
context.SaveChanges(); 

不知道爲什麼你在您的代碼中保留額外的List<Persons>。無論如何,你所顯示的代碼實際上可以直接使用你的EF上下文中的Persons集合來完成

+0

嗨,你想念它..我想注入保存實現... – Seabizkit

+0

@Seabizkit,你這句話讓我迷惑。你可以顯示一個僞代碼,顯示你正在嘗試做什麼。 – Rahul