我正在尝试定义自己的DbSet,例如:
public class MyDbSet<TEntity> : DbSet<TEntity>
where TEntity : class
{
public override TEntity Add(TEntity entity)
{
....
并在DbContext中使用它
public MyDbSet<User> Users { get; set; }
我面临的问题是,运行时
Users
将为空(因此无用),但我无法弄清原因。类似db.Users.Any(
这样的语句会抛出"值不能为 null"
的异常;如果我使用DbSet替换,例如: public DbSet<User> Users { get; set; }
一切正常运行。
有人知道如何解决这个问题,以便我可以使用自己派生的类吗?
编辑:
收到一些评论后,我澄清了为什么要这样做:我想能够轻松地从一种数据检索机制切换到另一种,而不必更改代码。例如,如果我决定在内存中进行缓存(缓存只是一个例子,可能我还想改变其他一些东西),我只需在MyDbSet
中覆盖 Any/Find/...
,从字典中读取而不是查询数据库,而其余的代码保持不变。这样,代码将执行“常规”操作,而不关心数据检索背后的细节。
因此,如果有人可以指出一种方法来在不扩展DbSet
类的情况下实现这一点,那也将回答这个问题。
非常感谢