C#repository pattern dbcontext错误

时间:2015-08-01 03:37:42

标签: c# entity-framework repository-pattern

我试图使用存储库模式制作一些东西我制作了3层winUI,dll和存储库所有这些都有引用的实体框架,但我的基础存储库在这里没有工作是下面的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using KuzeyYeli.ORM.Models;

namespace KuzeyYeli.Repository
{
    public class RepositoryBase<T> where T:class
    {

        private static NORTHWNDContext context;
        //singelton pattern
        public NORTHWNDContext Context
        {

            get {
                   if (context==null)
                          context=new NORTHWNDContext();
                   return context;
                }
            set { context = value;}
        }

        public IList<T> Listele()
        {
            return Context.Set<T>.ToList();
        }


    }
}

Set给我的错误就像&#34;不包含&#39; set&#39;的定义没有延期&#34;顺便说一句,当我写&#34; Context。&#34;我不能看到EF我做的课程真的需要知道请帮助

1 个答案:

答案 0 :(得分:3)

拥有存储库模式的关键在于除了使应用程序单元测试更容易之外,还可以解耦应用程序中的各个层。

实现存储库模式的正确方法是使用一个定义四种基本方法的接口...

public interface IEntity
{
    string Id { get; set; } 
}

public interface IRepository<T> where T : IEntity
{
    void Add(T entity);
    void Remove(T entity);
    void Create(T entity);
    T Find(string id);
}

现在你可以为你的任何实体实现这个界面,让我们假设你正在创建一个博客,一个博客会包含帖子吗?

所以,创建一个PostsRepository ......

public class Post : IEntity
{
    public Post()
    {
        this.Id = Guid.NewGuid().ToString();
    }

    public string Id { get; set;}
}

public class PostsRepository : IRepository<Post>
{
    public void Add(Post entity);
    /// etc
}

这就是应该如何实现的,尽管上面的例子没有考虑数据访问逻辑是使用Entity Framework组成的。

现在我们知道了存储库模式是什么,让我们继续集成实体框架......

PostsRepository类中,您将拥有一个可以引用您的Entity Framework DbContext的属性。请记住,PostsRepository具体实现,它将用于依赖于IRepository的任何其他类。

所以为什么这么麻烦,看起来好像收获很多麻烦,但你错了......

想象一下,您正在尝试验证提交到网站的帖子中的内容...如何隔离验证逻辑,同时避免对数据库进行任何调用?

您可以创建实现IRepository的手动模拟对象,这些对象不会引用EntityFramework作为数据源(这是一个冗长的方法)......或者您可以简单地使用那里可用的框架,例如{{1你用它来创建一个虚假的IRepository实现。

因此,简而言之,您需要开始学习的是:

  • 依赖性倒置
  • 存储库模式
  • 装饰图案
  • N-Tier架构
  • 洋葱建筑

所有这些都将对代码库增长后应用程序的可维护性产生重大影响。你不需要成为一名专家,这将通过犯错和在这里和那里咬一些子弹来实现......但是即使在短期内对这些也会产生巨大的影响。