Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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
C# 当使用genrics时,mocked DbSet不会返回值_C#_Entity Framework_Unit Testing_Generics_Moq - Fatal编程技术网

C# 当使用genrics时,mocked DbSet不会返回值

C# 当使用genrics时,mocked DbSet不会返回值,c#,entity-framework,unit-testing,generics,moq,C#,Entity Framework,Unit Testing,Generics,Moq,这是本书的延续 我正在用多个dbset模拟DbContext。我将对象添加到模拟对象中,但当我试图通过其id查询特定对象时,它会抛出一个错误 AmazonReport.Tests.ProductTests.ProductControllerTest.TestReturnEditedModel: System.InvalidOperationException : Sequence contains no matching element 我已经缩小了这个函数的范围(foreach的fo

这是本书的延续

我正在用多个dbset模拟DbContext。我将对象添加到模拟对象中,但当我试图通过其
id
查询特定对象时,它会抛出一个错误

AmazonReport.Tests.ProductTests.ProductControllerTest.TestReturnEditedModel:
    System.InvalidOperationException : Sequence contains no matching element
我已经缩小了这个函数的范围(foreach的
foreach
循环用于验证im传入的id是否在DbSet中,它就是DbSet)

照目前的情况,它不起作用。但是,如果我注释掉当前的return语句并使用
返回this.DbSet.Single(x=>Convert.ToInt32(x.Id)==Convert.ToInt32(Id))它不会抛出错误


因此,我的问题是,当
DbSet
包含一个id==3的对象和传入的
TId id==3的对象时,为什么compare不返回任何对象?

,因为通过将这两个对象都转换为
对象,现在使用引用相等而不是值相等。下面是一个实际发生情况的简单例子:

int i = 1;
int j = 1;

bool eq = ((object)i) == ((object)j); // false

而直接将两个整数与
=
进行比较则是通过值来比较两个整数。

因为通过将两个整数都转换为
对象,现在使用的是引用相等,而不是值相等。下面是一个实际发生情况的简单例子:

int i = 1;
int j = 1;

bool eq = ((object)i) == ((object)j); // false

而直接将两个整数与
=
进行比较则是通过值来比较两个整数。

因为通过将两个整数都转换为
对象,现在使用的是引用相等,而不是值相等。下面是一个实际发生情况的简单例子:

int i = 1;
int j = 1;

bool eq = ((object)i) == ((object)j); // false

而直接将两个整数与
=
进行比较则是通过值来比较两个整数。

因为通过将两个整数都转换为
对象,现在使用的是引用相等,而不是值相等。下面是一个实际发生情况的简单例子:

int i = 1;
int j = 1;

bool eq = ((object)i) == ((object)j); // false


而直接用
==
比较两个整数时,会按值比较两个整数。

我们可以看到模拟DbSet的设置代码吗?我们可以看到模拟DbSet的设置代码吗?我们可以看到模拟DbSet的设置代码吗?我们可以看到模拟DbSet的设置代码吗?谢谢。
object.equals()
函数是否可以比较这两个参数?是的,
object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像
Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明
Single
没有返回值——这意味着
GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了
GetEnumerator
方法,
mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())。我可以在我设置mock
DbContext
DbSet
s的地方发布代码,但是大约有150行。谢谢。
object.equals()
函数是否可以比较这两个参数?是的,
object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像
Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明
Single
没有返回值——这意味着
GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了
GetEnumerator
方法,
mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())。我可以在我设置mock
DbContext
DbSet
s的地方发布代码,但是大约有150行。谢谢。
object.equals()
函数是否可以比较这两个参数?是的,
object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像
Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明
Single
没有返回值——这意味着
GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了
GetEnumerator
方法,
mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())。我可以在我设置mock
DbContext
DbSet
s的地方发布代码,但是大约有150行。谢谢。
object.equals()
函数是否可以比较这两个参数?是的,
object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像
Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明
Single
没有返回值——这意味着
GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了
GetEnumerator
方法,
mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())。我可以在设置mock
DbContext
DbSet
s的地方发布代码,但它大约有150行长。