C# EF linq模拟中临时创建的表中出现异常
我已经用假数据库上下文实现了EF测试。下面是我的sql查询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
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();