什么是替代性的模式的使用对于实体的框架?

一些我知道的是:

  1. "普通"EntityFramework-aka统一的工作

    using (Data.Model c = new Data.Model())
    {
        var z = c.Users.Where(x=>x.Name=='John');
    }

  2. 储存库的图案

    //Model implements IRepository
    User user = Model.Instance.Get<User>(u => u.Name == "John");
    

  3. 还有什么?
  4. ?
有帮助吗?

解决方案

一个很好的书,看看是马丁*福勒的 "模式的企业应用程序建筑".

在那里,他去过一些模式,用于检索/映射数据,如交互单元的工作、存储库的模式等等。也许事情可能是有用的,在一起的实体的框架。我得看一看。

其他提示

我的回答你的问题依据的假设是,你正在使用的实体的框架,直接在你的UI/控制/服务。

它已经证明,采用任何奥姆,inclusing EF,直接在你的UI/控制/服务,将引起很多问题中的未来。最重要的是,它使得很难,如果不是不可能的,单元的测试应用程序。

第二种办法即"模式实现的储存库"也是错误的,在我看来,因为模型和Respositories有不同的她还担任并根据"单一的责任"的一部分的固体原则不应合并这两个概念在一起。甚至如果你想要使用活性对象的图案模型中,我建议不要,你必须将模型从奥姆你使用。

最好的和最最推荐的解决方案是有一个接口等IRepository或IRepository与非常基本的成员作为模式的建议。是这样的:

Interface IRepository<T> where T:class
{
    void Insert(T entity);
    void Update(T entity);
    void Delete(T entity);

    // if you don't want to return IQueryable
    T FindById(object id);
    IEnumerable FindXXXXX(params)

    // if you prefer to return an IQueryable
    IQueryable<T> Find(Expression<Func<T, bool>> predeicate);
}

注意到一些永世相信存储库不应该返回IQueryable.此外,还可以考虑使用ISpecification而不是表现形式和lambda。

你会需要实现IRepositoy口大部分的实体。使用这种方法还可以嘲笑你的存储库中的时候写的单元测试。在生产,将需要使用一个Ioc提供诸如团结,而,林夫,Catsle等。你也可以受益于微软公共服务定位执行避免联结到一个特定的IoC框架。

在老天,我曾有一个数据接口,这是impleneted用于特定业务领域或服务。其中一个问题与这种做法是,你将结束与重复代码不同的数据访问的服务如果你跟踪你的源代码,你会最终。

我们利用代码类似于什么你在你的单元的工作的例子。

我们做什么,除了是地图象数据传送对象。

有许多的文章上的问题,但该清单将减少基本上如果你想要一个很好的一个。 这篇文章从MSDN杂志 是相当好的,尽管它专门处理n层的应用。但因为你不说什么你在建筑的,也许它会帮助。

皇宫2SQL可以替代。这是一篇文章 依赖关系注入团结和皇宫SQL DataContexts

统一- http://unity.codeplex.com/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top