2016-12-11 49 views
0

对不起,我是新来的实体框架..实体框架7创建内存实现DbSet的

我想创建一个TestDbSet提供在EF 7

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; 
     } 
} 
的内存实现DbSet的

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

我试图改变方法签名,但我不知道如何返回项目作为EntityEntry

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

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

+0

你怎么想这个实现做实DB测试? –

+0

对于单元测试.. – RajGan

+0

我认为最好是从列表或集合继承DbSet,还要处理生成值suc的行为作为SqlSever中的标识 –

回答

2

因为如果没有你可以use Microsoft.EntityFrameworkCore.InMemory

+0

是在内存中工作。但我想模拟我的DBSets,并且我也有我使用存储过程的批量更新。 – RajGan

+0

您将从DbContext获得'EntityEntry'。由于DbSets是上下文的一部分,因此不能在不涉及DbContext的情况下使用'DbSet'。在你的代码片段中,你不涉及任何地方的上下文。所以如果你不想在问题的评论中使用上下文,你最好从List或者Collection继承。 – Smit

+0

@Smit:我试图在EF 7中复制这个[Sample](https://msdn.microsoft.com/en-us/library/dn314431(v = vs.113).aspx),我无法重写TestDbset类中的dbset方法..让我知道我怎么能够实现返回的EntityEntry .. – RajGan