gpt4 book ai didi

c# - 存储库模式应该使用 ObjectSet 还是 IDbSet 作为基类?

转载 作者:行者123 更新时间:2023-11-30 12:50:50 25 4
gpt4 key购买 nike

我正在尝试基于 MyFinance 创建一个基础存储库类首先使用实体​​框架代码的示例。我想将其更改为仅使用 Entity Framework 。该示例使用 IDbSet ,但我不知道要将其更改为普通 Entity Framework 。也许ObjectSet<T> ?当我使用 ObjectSet<T>我丢失了一些方法,例如 GetById所以也许这不是 100% 正确的。任何帮助将不胜感激。

首先使用实体​​框架代码的示例存储库

public abstract class RepositoryBase<T> where T : class
{
private MyFinanceContext dataContext;
private readonly IDbSet<T> dbset;
protected RepositoryBase(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
dbset = DataContext.Set<T>();
}

protected IDatabaseFactory DatabaseFactory
{
get; private set;
}

protected MyFinanceContext DataContext
{
get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
}
public virtual void Add(T entity)
{
dbset.Add(entity);
}
public virtual void Update(T entity)
{
dbset.Attach(entity);
dataContext.Entry(entity).State = EntityState.Modified;
}
public virtual void Delete(T entity)
{
dbset.Remove(entity);
}
public virtual void Delete(Expression<Func<T, bool>> where)
{
IEnumerable<T> objects = dbset.Where<T>(where).AsEnumerable();
foreach (T obj in objects)
dbset.Remove(obj);
}
public virtual T GetById(long id)
{
return dbset.Find(id);
}
public virtual T GetById(string id)
{
return dbset.Find(id);
}
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
public virtual IEnumerable<T> GetMany(Expression<Func<T, bool>> where)
{
return dbset.Where(where).ToList();
}
public T Get(Expression<Func<T, bool>> where)
{
return dbset.Where(where).FirstOrDefault<T>();
}

我认为我应该为 EntityFramework 将其更改为

public abstract class BaseRepository<T> where T : class
{
private MyDBContainer _dataContext;
private readonly ObjectSet<T> dbset;

protected BaseRepository(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
dbset = DataContext.CreateObjectSet<T>();
}

protected IDatabaseFactory DatabaseFactory
{
get;
private set;
}

protected MyDBContainer DataContext
{
get { return _dataContext ?? (_dataContext = DatabaseFactory.DataContext); }
}
public virtual void Add(T entity)
{
dbset.AddObject(entity);
}
//public virtual void Update(T entity)
//{
// dbset.Attach(entity);
// _dataContext.Entry(entity).State = EntityState.Modified;
//}
public virtual void Delete(T entity)
{
dbset.DeleteObject(entity);
}
public virtual void Delete(Expression<Func<T, bool>> where)
{
IEnumerable<T> objects = dbset.Where<T>(where).AsEnumerable();
foreach (T obj in objects)
dbset.DeleteObject(obj);
}
//public virtual T GetById(long id)
//{
// return dbset.(id);
//}
//public virtual T GetById(string id)
//{
// return dbset.Find(id);
//}
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
public virtual IEnumerable<T> GetMany(Expression<Func<T, bool>> where)
{
return dbset.Where(where).ToList();
}
public T Get(Expression<Func<T, bool>> where)
{
return dbset.Where(where).FirstOrDefault<T>();
}

}

最佳答案

ObjectSet<T>DbSet<T> 的前身及其关联界面 IDbSet<T> .但是没有,因为我确定您已经发现了 IObjectSet<T> , 但你应该使用 ObjectSet<T> 是正确的代替 DbSet<T> .

关于c# - 存储库模式应该使用 ObjectSet<T> 还是 IDbSet<T> 作为基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com