我试图使用存储库模式制作一些东西我制作了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我做的课程真的需要知道请帮助
答案 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实现。
因此,简而言之,您需要开始学习的是:
所有这些都将对代码库增长后应用程序的可维护性产生重大影响。你不需要成为一名专家,这将通过犯错和在这里和那里咬一些子弹来实现......但是即使在短期内对这些也会产生巨大的影响。