抱歉,我是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中使用..
答案 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>;
}