实体框架7创建DbSet的内存实现

时间:2016-12-11 21:07:06

标签: c# asp.net entity-framework entity-framework-core

抱歉,我是Entity Framework的新手..

我想创建一个TestDbSet,它在EF 7中提供DbSet的内存实现。

public class TestDbSet<TEntity> : DbSet<TEntity>, IQueryable, IEnumerable<TEntity>, IDbAsyncEnumerable<TEntity> 
        where TEntity : class 
    { 
        ObservableCollection<TEntity> _data; 
        IQueryable _query; 


    public TestDbSet() 
    { 
        _data = new ObservableCollection<TEntity>(); 
        _query = _data.AsQueryable(); 
    } 

    public override TEntity Add(TEntity item) 
    { 
        _data.Add(item); 
        return item; 
    } 

    public override TEntity Remove(TEntity item) 
    { 
        _data.Remove(item); 
        return item; 
        } 
 }

我在Add方法中遇到错误,返回类型必须是EntityEntry<T>才能匹配Overriden Dbset成员。

我尝试更改方法签名但我不确定如何将项目作为EntityEntry

返回
 public override EntityEntry<T> Add(T item) 
        {
           _data.Add(item);
            return  item;
        }

我找不到类似的问题。你能指导我们如何在EF 7中实现它。我知道它可以在EF 6中使用..

3 个答案:

答案 0 :(得分:3)

对于没有真实数据库的测试,您可以use Microsoft.EntityFrameworkCore.InMemory打包

答案 1 :(得分:0)

抱歉,我知道这是一个非常古老的主题。但想想这是否有帮助。我设法通过返回null覆盖EF Core的Add方法。由于我们只是将数据项放入列表中,因此除非您需要ChangeTracking对象,否则返回null并不重要。

    public override EntityEntry<T> Add(T item)
    {
        _data.Add(item);

        return null;
    }

答案 2 :(得分:0)

我像下面的代码一样解决了它

 public override EntityEntry<T> Add(T item) 
 {
           _data.Add(item);
            return item as EntityEntry<T>;
 }