【发布时间】:2014-04-28 00:17:55
【问题描述】:
我正在尝试定义自己的 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( 这样的东西会抛出一个"value cannot be null";如果我像
public DbSet<User> Users { get; set; }
一切正常。
有人知道我是否以及如何解决这个问题,以便我可以使用自己的派生类?
编辑:
在收到一些 cmets 后,我澄清了我这样做的原因:我希望能够在不更改代码的情况下轻松地从数据检索机制切换到另一种机制。例如,如果我决定在内存中进行缓存(缓存只是一个示例,可能我还想更改其他一些东西)我只是覆盖MyDbSet 中的Any/Find/... 并从字典中读取而不是查询数据库,其余代码保持不变。这样,代码将执行“常规”操作,而无需考虑如何在后面检索数据。
因此,如果有人可以在不扩展 DbSet 类的情况下指定一个方法来执行此操作,那也将回答这个问题。
非常感谢
【问题讨论】:
-
你为什么要这样从 DbSet 派生?听起来你真的不能这样做,因为你不能在 DbContext 中覆盖 DBSet 的实例化。
-
最重要的是,我想知道真正的用例。在一个结构合理的应用中——我从来没有发现需要这样做。
-
请查看更新后的问题,了解我为什么要这样做。
标签: c# entity-framework dbset