首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架7创建DbSet的内存中实现

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

Stack Overflow用户
提问于 2016-12-12 05:07:06
回答 3查看 2.8K关注 0票数 3

抱歉,我不熟悉Entity Framework。

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

代码语言:javascript
复制
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>才能匹配重写的Dbset成员。

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

代码语言:javascript
复制
 public override EntityEntry<T> Add(T item) 
        {
           _data.Add(item);
            return  item;
        }

我找不到类似的问题。你能指导我如何在EF7中实现吗?我知道它会在EF6中工作。

EN

回答 3

Stack Overflow用户

发布于 2016-12-12 06:33:27

对于没有real DB的测试,您可以使用use Microsoft.EntityFrameworkCore.InMemory

票数 3
EN

Stack Overflow用户

发布于 2018-06-07 06:45:01

对不起,我知道这是一个很老的帖子。但我想如果这有帮助的话。我设法通过返回null覆盖了EF Core的Add方法。因为我们只是列表中的数据项,所以除非您需要ChangeTracking对象,否则返回null并不重要。

代码语言:javascript
复制
    public override EntityEntry<T> Add(T item)
    {
        _data.Add(item);

        return null;
    }
票数 0
EN

Stack Overflow用户

发布于 2019-01-19 07:22:25

我用下面的代码解决了这个问题

代码语言:javascript
复制
 public override EntityEntry<T> Add(T item) 
 {
           _data.Add(item);
            return item as EntityEntry<T>;
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41091155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档