c# - Linq 查询从 FakeXrmEasy 上下文返回错误记录
问题描述
我是 FakeXrmEasy 世界的新手,并试图在另一个团队编写的大型现有代码库中实现一些单元测试:)
我在 OnPremise DynamicsCRM 应用程序中设置了一个实体,该实体具有以下属性:
[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("statuscode")]
public Microsoft.Xrm.Sdk.OptionSetValue statuscode
{
get
{
return this.GetAttributeValue<Microsoft.Xrm.Sdk.OptionSetValue>("statuscode");
}
set
{
this.OnPropertyChanging("statuscode");
this.SetAttributeValue("statuscode", value);
this.OnPropertyChanged("statuscode");
}
}
/// <summary>
/// Invoice
/// </summary>
[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("invoiceid")]
public Microsoft.Xrm.Sdk.EntityReference InvoiceId
{
get
{
return this.GetAttributeValue<Microsoft.Xrm.Sdk.EntityReference>("invoiceid");
}
set
{
this.OnPropertyChanging("InvoiceId");
this.SetAttributeValue("invoiceid", value);
this.OnPropertyChanged("InvoiceId");
}
}
所以我的 InvoiceId 是一个 EntityReference 并且我的 statuscode 属性是一个 OptionSetValue 类型。我有一个查询要返回与 InvoiceId && statuscode != X 匹配的实体,但在发票 id 匹配的地方返回记录,但如果 statuscode.Value == X 也返回记录,因此仅应用 where 的第一部分或第二部分失败但结果仍然添加。
我的查询是:
var result = (from qa in ctx.allocationSet
where qa.InvoiceId.Id == invoiceId
&& qa.statuscode.Value != 2
select qa);
所以本质上,如果我在这个集合中填充 2 条记录,1 条带有 InvoiceId abc-123 和 statuscode = 1,然后另一个带有 InvoiceId XYZ-987 和 statuscode = 2,然后搜索 invoiceId XYZ-987 我的查询应该返回零记录但是这个每次返回第二条记录,即使 statuscode.Value ==2?
解决方案
FakeXrmEasy 中的查询将根据内存数据库的当前状态返回结果。
如果您对实体记录进行更改而没有将其实际持久化到内存数据库中(即,没有实际调用 service.Create、service.Update、service.Delete 等方法),那么这些更改将不会t 被持久化到数据库中,因此,从数据库中检索数据时不会反映更改。
这种行为实际上模仿了 CDS / 组织服务。如果您在代码中设置实体属性,而没有实际将其保存回 CDS / CRM / OrgService,那么当您检索它时,它就不会存在,因为它实际上并没有在真实数据库中更新。
所以与 FakeXrmEasy 的概念相同。
推荐阅读
- python - 绝对路径:Selenium Xpath 无法识别元素
- javascript - 如何从javascript中第二个数组中存在的数组中删除元素?
- jquery - 取消隐藏时如何以正确的宽度显示隐藏的选择?
- c++ - 语言设计问题:为什么 C 和 C++ 将类型和函数的声明与定义分开?
- canvas - 用 declut 标记 Declutter Circles
- r - 如何在闪亮的应用程序中通过日期范围对已加载的文件进行子集化
- vba - 在没有任何 id 的 Pre Tag 中获取文本
- makefile - 仅显示当前目录,而不是所有路径,并在 makefile 中使用它们在 c 中 tar
- c# - 我可以将 JSON 数组反序列化为类的属性吗?
- python - Python中的静态方法和类方法有什么区别?