- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有什么区别
public IDbSet<Chrip> Chirps { get; set; }
和
public DbSet<Chrip> Chirps { get; set; }
它们一样吗?
最佳答案
Sam I am's answer简洁地定义了接口(interface)和类之间的区别,但是在选择在代码中使用哪一个时还有其他注意事项。
具体来说 - 一个类可以实现多个接口(interface),或者可以实现任何接口(interface)未定义的方法和属性。
在这种情况下, IDbSet<TEntity>
接口(interface)定义了 DbSet<TEntity>
使用的大部分 方法和属性类,但不是全部。例如,FindAsync
, RemoveRange
和 SqlQuery
方法只存在于具体的类实现中。如果您在代码中使用该接口(interface),那么如果不首先转换为具体类型,您将无法使用这些特定方法。
此外,the Remarks section in the MSDN for IDbSet<TEntity>
还有一个有趣的地方:
IDbSet<TEntity>
was originally intended to allow creation of test doubles (mocks or fakes) forDbSet<TEntity>
. However, this approach has issues in that adding new members to an interface breaks existing code that already implements the interface without the new members. Therefore, starting with EF6, no new members will be added to this interface and it is recommended thatDbSet<TEntity>
be used as the base class for test doubles.
我相信可以安全地扩展这种思路,即您通常应该使用 DbSet<TEntity>
来声明您的属性。而不是 IDbSet<TEntity>
除非你有充分的理由不这样做。
关于c# - IDbSet 和 DbSet 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38443037/
我确信这是非常基本的,但我在构建通用方法时遇到了问题。我有无数在我的 DBContext 中声明的接口(interface)类( IDbSet 、 IDbSet 等)。我想将它们传递给处理它们的方法。
有没有办法使用这个答案中描述的方法No FindAsync() method on IDbSet对于 DbContext 的 DbSet 属性? 编辑: 链接的答案包含如何构建从 IDbSet 继承的
我正在尝试在一个新项目中对我的第一个存储库进行单元测试,我们决定在该项目中主要使用 EF6 来处理异步内容。我在为我的模型伪造 IDbSet 并允许在使用新的异步细节之前使用任何 Linq 时遇到问题
public abstract class RepositoryBase : IRepository where T : class { private ShopCoreDbContext d
有什么区别 public IDbSet Chirps { get; set; } 和 public DbSet Chirps { get; set; } 它们一样吗? 最佳答案 Sam I am's
给定一个 IDbSet,其中 Person 包含一个“Id”属性,我如何才能执行以下命令: var p = PersonDbSet.FirstOrDefault(i=>i.Id = 3); 我可以构建
我根本无法让它工作。我的测试中有这段代码: MockRepository repository = new MockRepository(); IDbSet userSet = repository.
FindAsync() 是否有原因? IDbSet 中省略了方法界面? Find是界面的一部分,异步版本不可用似乎很奇怪。我需要转换到 DbSet访问它,这有点麻烦: User user = awai
我正在尝试模拟 System.Data.Entity.IDbSet 以使其返回一些数据(在本例中只是一个空集合): var mock = new Mock>(); mock.Setup(x => x.
我正在尝试模拟 System.Data.Entity.IDbSet 以使其返回一些数据(在本例中只是一个空集合): var mock = new Mock>(); mock.Setup(x => x.
我想使用 IDbSet<> 实现通用存储库模式 Entity Framework 的接口(interface)。 当我问IDbSet时来自 Autofac,它应该解析 IDbContext然后调用它的
我想让 visual studio 创建的 T4 模板将我的实体输出为 IDbset 而不是 DbSet,知道怎么做吗? 最佳答案 我假设您已经有一个生成 DbContext 的 t4 模板.所以只需
我们在单元测试中有一个场景,我们在其中创建了一个实现 IDbSet 的 FakeDbSet。在 FakeUnitOfwork 中,我有一些属性是 IDbSets 并使用 FakeDbSet 进行更新。
我正在尝试基于 MyFinance 创建一个基础存储库类首先使用实体框架代码的示例。我想将其更改为仅使用 Entity Framework 。该示例使用 IDbSet ,但我不知道要将其更改为普通
我以前从未真正做过单元测试,而且我在第一次测试时跌跌撞撞。问题在于 _repository.Golfers.Count(); 始终指示 DbSet 为空。 我的测试很简单,我只是想添加一个新的高尔夫球
我正在尝试模拟实现 IDbSet ,而我恰好在 F# 中这样做。 type MockDbSet(items:seq) = let collection = ResizeArray(items)
在 EF 4.1+ 中,这两行代码之间有区别吗? dbContext.SomeEntitySet.Add(entityInstance); dbContext.Entry(entityInstance
我正在尝试使用Moq对 Entity Framework Code First 类进行一些测试。我对起订量和模拟技术非常陌生,我想知道是否可以轻松地进行我将在下面描述的测试。我在网上搜索了一些解决方案
我正在尝试使用 Moq 框架模拟 IDbSet。单元测试应向现有模拟 DbSet 集合 (SetUp) 添加新记录(实体)并返回新集合的计数。 我的 TestInitialize 设置如下所示: pu
我正在通过实现 IDbSet 接口(interface)来实现 FakeDataSet 类。作为实现此接口(interface)的一部分,我必须实现 Find 方法。我所有的实体类都有一个 Guid
我是一名优秀的程序员,十分优秀!