2016-12-11 50 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