Naz*_*azz 7 c# entity-framework repository-pattern
我想使用Entity Framework实现通用的存储库模式(我知道关于存储库有很多有争议的观点,但这仍然是我所需要的)。我希望它具有的界面如下:
public interface IRepository
{
IQueryable<TEntity> Query<TEntity>()
where TEntity: Entity;
void Save<TEntity>(TEntity entity)
where TEntity : Entity;
void Delete<TEntity>(TEntity entity)
where TEntity : Entity;
}
Run Code Online (Sandbox Code Playgroud)
Entity是仅具有int ID属性的基类。并像这样使用它:
IRepository repository = ... // get repository (connects to DB)
int userId = GetCurrentUserId();
if (!repository.Query<User>().Any(u => u.Id == userId)) // performs SELECT query
{ /*return error*/ }
var newOrder = new Order { UserId = userId, Status = "New" }
repository.Save(newOrder); // performs INSERT query
...
newOrder.Status = "Completed";
repository.Save(newOrder); // performs UPDATE query
Run Code Online (Sandbox Code Playgroud)
我想避免UnitOwWork并将所有对象更改提交一次Save()或Delete()调用到数据库。我想做的事情看起来很简单,但是我还没有找到任何使用EntityFramework的例子。我能找到的最接近的例子是这个答案,但是它使用了UnitOwWork和每个实体存储库,这比我需要做什么。
1-创建一个接口
interface IMain<T> where T : class
{
List<T> GetAll();
T GetById(int id);
void Add(T entity);
void Edit(T entity);
void Del(int id);
int Savechange();
}
Run Code Online (Sandbox Code Playgroud)
2-创建一个类
public class Main<T> : IMain<T> where T : class
{
public DataContext db;
public void Add(T entity)
{
db.Set<T>().Add(entity);
}
public void Del(int id)
{
var q = GetById(id);
db.Set<T>().Remove(q);
}
public void Edit(T entity)
{
db.Entry<T>(entity).State = EntityState.Modified;
}
public List<T> GetAll()
{
return db.Set<T>().Select(a=>a).ToList();
}
public T GetById(int id)
{
return db.Set<T>().Find(id);
}
public int Savechange()
{
return db.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
3-创建一个存储库,名称为 YourTable ForExample Student
public class Student : Main<Tbl_Student>
{
public Student()
{
db = new DataContext();
}
}
Run Code Online (Sandbox Code Playgroud)
4-根据您的操作编写此代码
Student student=new Student();
student.Del(3);
int a = student.Savechange();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |