Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用Moq(EntityFramework.Testing.Moq)的DbSet-Find_Asp.net Mvc_Entity Framework_Moq - Fatal编程技术网

Asp.net mvc 使用Moq(EntityFramework.Testing.Moq)的DbSet-Find

Asp.net mvc 使用Moq(EntityFramework.Testing.Moq)的DbSet-Find,asp.net-mvc,entity-framework,moq,Asp.net Mvc,Entity Framework,Moq,我一直在使用Moq对象和扩展,最近我在尝试查找时遇到了一个问题。我的想法是正确的,简单地进行如下设置(从文档中): 但是,当我尝试使用模型的键进行DbSet查找时: var b = db.Blogs.Find(1); 我会回来的 现在,我可以通过如下方式进行设置来实现这一点: context.Setup(m => m.Blogs.Find(It.IsAny<int>())) .Returns<object[]>(s => data.Find(d =&g

我一直在使用Moq对象和扩展,最近我在尝试查找时遇到了一个问题。我的想法是正确的,简单地进行如下设置(从文档中):

但是,当我尝试使用模型的键进行DbSet查找时:

var b = db.Blogs.Find(1);
我会回来的

现在,我可以通过如下方式进行设置来实现这一点:

context.Setup(m => m.Blogs.Find(It.IsAny<int>()))
   .Returns<object[]>(s => data.Find(d => d.Blogs == (int)s[0]));
var set = new Mock<DbSet<Blog>>()
    .SetupData(data, objects => data.SingleOrDefault(d => d.Id == (int) objects.First()));
context.Setup(m=>m.Blogs.Find(It.IsAny()))
.Returns(s=>data.Find(d=>d.Blogs==(int)s[0]);
但我开始怀疑我是不是做错了什么,是不是把事情复杂化了


谢谢你的建议

如果查看
SetupData
方法的签名

public static Mock<DbSet<TEntity>> SetupData<TEntity>(this Mock<DbSet<TEntity>> mock, ICollection<TEntity> data = null, Func<object[], TEntity> find = null) where TEntity : class
public static Mock SetupData(此Mock Mock,ICollection data=null,Func find=null),其中tenty:class
您可以看到,必须在该方法调用中指定find谓词。通过这样做,您不必额外调用来设置上下文

您可以这样做:

context.Setup(m => m.Blogs.Find(It.IsAny<int>()))
   .Returns<object[]>(s => data.Find(d => d.Blogs == (int)s[0]));
var set = new Mock<DbSet<Blog>>()
    .SetupData(data, objects => data.SingleOrDefault(d => d.Id == (int) objects.First()));
var set=new Mock()
.SetupData(data,objects=>data.SingleOrDefault(d=>d.Id==(int)objects.First());

非常好,谢谢!如果可能的话,您能提供一个用法示例吗?@MikeWitt添加了一个快速示例。