- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
FindAsync()
是否有原因? IDbSet<T>
中省略了方法界面? Find
是界面的一部分,异步版本不可用似乎很奇怪。我需要转换到 DbSet<T>
访问它,这有点麻烦:
User user = await ((DbSet<User>)db.Users)
.FindAsync("de7d5d4a-9d0f-48ff-9478-d240cd5eb035");
最佳答案
如果您拥有 IDbSet<T>
的消费者,我假设你这样做是因为你想访问 FindAsync()
从消费者内部,那么一个简单的解决方案是创建您自己的接口(interface),其中包括 IDbSet 并包含 FindAsync()
中的任何一个。您要使用的方法:
public interface IAsyncDbSet<T> : IDbSet<T>
where T : class
{
Task<T> FindAsync(params Object[] keyValues);
}
这解决了不必强制转换为 DbSet 的问题——顺便说一句,这消除了契约编码的抽象性优势。但这也带来了一系列问题。
一个更好的解决方案 (imo) 需要更多的工作是定义一个接口(interface),该接口(interface)只包含您想要使用的成员,否则将是您的 DbSet 对象,在实现时子类 DbSet接口(interface),然后在您的代码中使用该接口(interface):
public interface IMyAsyncDbSet<TEntity>
where TEntity : class
{
TEntity Add(TEntity entity);
TEntity Remove(TEntity entity);
// Copy other methods from IDbSet<T> as needed.
Task<Object> FindAsync(params Object[] keyValues);
}
public class MyDbSet<T> : DbSet<T>, IMyAsyncDbSet<T>
where T : class
{
}
这是一个适配器模式,真的。它将您的代码期望的接口(interface)与 Entity Framework 提供的接口(interface)分离。现在,它们是相同的——这就是为什么实现除了继承 DbSet<T>
什么都不做的原因。 .但后来他们可能会出现分歧。到那时,您仍然可以使用最新的 DbSet 而不会破坏您的代码。
关于c# - IDbSet<T> 上没有 FindAsync() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800967/
我确信这是非常基本的,但我在构建通用方法时遇到了问题。我有无数在我的 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
我是一名优秀的程序员,十分优秀!