Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# EF linq模拟中临时创建的表中出现异常_C#_Entity Framework_Linq_Unit Testing_Mocking - Fatal编程技术网

C# EF linq模拟中临时创建的表中出现异常

C# EF linq模拟中临时创建的表中出现异常,c#,entity-framework,linq,unit-testing,mocking,C#,Entity Framework,Linq,Unit Testing,Mocking,我已经用假数据库上下文实现了EF测试。下面是我的sql查询 flatLicenseOrderId = (from users in this.CustomerEntities.UserMappers where users.CompanyId == CompanyId && users.IsActive

我已经用假数据库上下文实现了EF测试。下面是我的sql查询

     flatLicenseOrderId = (from users in this.CustomerEntities.UserMappers
                                              where users.CompanyId == CompanyId && users.IsActive
                                              join order in this.CustomerEntities.Orders on users.customerid equals order.customerid into orderDetails
                                              from customerOrder in orderDetails.DefaultIfEmpty()
                                              join license in this.CustomerEntities.License on users.Customerid equals license.Customerid into licenseDetails
                                              from customerLicense in licenseDetails.DefaultIfEmpty()
                                              from orderdetails in this.CustomerEntities.OrderDetails
                                              where (customerOrder.OrderId == orderdetails.OrderId || customerLicense.OrderId == orderdetails.OrderId) 
                                              select orderdetails.OrderId).Distinct().ToList();
以下是我的嘲弄背景

     public static CustomerEntities GetOrderDetails()
            {
                var mockData = new Mock<CustomerEntities>();                

                var users = new FakeDbSet<UserMapper>
                {
                    new UserMapper { CompanyId = 27835, IsActive = true, CustomerId = 956980 },
                    new UserMapper { CompanyId = 148150, IsActive = true, CustomerId = 1039733 }
                };

                mockData.Setup(m => m.UserMappers).Returns(users);

                var order = new FakeDbSet<Orders>
                {
                    new Orders { CustomerId  = 956980, OrderId = 401789 },
                    new Orders { CustomerId = 956980, OrderId = 426192 }                   
                };

                mockData.Setup(m => m.Orders).Returns(order);    

                var license = new FakeDbSet<License>
                {
                   new License { Customerid = 956980, OrderId = 401789 },
                   new License { Customerid = 1039733, OrderId = 423132 }
                };

                mockData.Setup(m => m.License).Returns(license);

                var orderdetails = new FakeDbSet<OrderDetails>
                {
                    new OrderDetails { OrderId = 401789, ProductID = 7703 },
                    new OrderDetails { OrderId = 401789, ProductID = 7002 }                   
                };

                mockData.Setup(m => m.OrderDetails).Returns(orderdetails);

                return mockData.Object;
            }
示例:对于customerid=956980,模拟工作正常,但对于另一个customerid=1039733,会产生异常,因为客户在订单表中没有条目

有人能帮忙吗,如何处理这种情况下的嘲笑

试试这个。
在数据库操作的情况下,它可能会失败,但对于实体模型来说,由于
简明
操作,它会做得很好

flatLicenseOrderId = (from users in this.CustomerEntities.UserMappers
                                        .Where(x=>x.CompanyId==CompanyId && x.IsActive)
                      join order in this.CustomerEntities.Orders 
                           on users.customerid equals order.customerid 
                      into orderDetails
                      from customerOrder in orderDetails.DefaultIfEmpty()
                      join orderdetails in this.CustomerEntities.OrderDetails
                      on customerOrder?.OrderId equals orderdetails.OrderId
                      select new{users.customerid,orderdetails.OrderId})
                     .Distinct().ToList();

它可能会在数据库操作的情况下失败-我们不能让我们的代码失败只是为了通过模拟案例。我认为你的意思是,对于你建议的代码,正常的数据库操作将失败。这是你不应该尝试模拟EF的众多原因之一。将此作为集成测试来执行,这是针对真实SQL数据库的。
flatLicenseOrderId = (from users in this.CustomerEntities.UserMappers
                                        .Where(x=>x.CompanyId==CompanyId && x.IsActive)
                      join order in this.CustomerEntities.Orders 
                           on users.customerid equals order.customerid 
                      into orderDetails
                      from customerOrder in orderDetails.DefaultIfEmpty()
                      join orderdetails in this.CustomerEntities.OrderDetails
                      on customerOrder?.OrderId equals orderdetails.OrderId
                      select new{users.customerid,orderdetails.OrderId})
                     .Distinct().ToList();