2016-02-05 49 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