CRM 2016 FakeXrmEasy N:N关系

时间:2016-05-19 08:27:13

标签: unit-testing dynamics-crm-online dynamics-crm-2016

我正在尝试使用FakeXrmEasy为CRM Online(2016)执行一些单元测试,而我在使用N:N关系设置我的一个测试时遇到问题

以下代码设置了一个伪造的上下文,其中包含2个实体并初始化伪造的组织服务:

var entity1 = new New_entityOne();
var entity2 = new New_entityTwo();

var context = new XrmFakedContext();
context.ProxyTypesAssembly = Assembly.GetAssembly(typeof(New_entityOne));
context.Initialize(new List<Entity>()
{
    entity1,
    entity2
});

var service = context.GetFakedOrganizationService();

然后我尝试在这些实体之间创建N:N关系:

var join = new AssociateRequest
{
    Relationship = new Relationship
    {
        SchemaName = "new_entityOne_new_entityTwo",
        PrimaryEntityRole = EntityRole.Referenced
    },
    Target = entity1.ToEntityReference(),
    RelatedEntities = new EntityReferenceCollection
    {
        entity2.ToEntityReference()
    }
};

service.Execute(join);

当我执行此Request时,我希望在我的模拟数据中生成N:N-join记录,在entity1entity2之间

相反,我收到这样的错误:

  

FakeXrmEasy.dll中出现'System.Exception'类型的异常   但未在用户代码中处理

     

其他信息:关系new_entityOne_new_entityTwo   元数据缓存中不存在

有没有其他人尝试过这种方式使用这个单位框架?到目前为止,我已经使用它获得了非常好的结果。

显然,这些不是我的实际实体和关系名称

1 个答案:

答案 0 :(得分:3)

请尝试添加虚假关系,如here

所示

这是因为对于N:1没有交叉表,连接是通过EntityReference执行的,就是这样,但是对于很多人来说,因为有一个交叉表,我们需要告诉框架如何处理这个场景现在。

还有一个更新,其中不再强制使用ProxyTypesAssembly,只要您使用早期绑定类型,代理类型程序集将从您的类型“猜测”。

所以你可以删除这个

context.ProxyTypesAssembly = Assembly.GetAssembly(typeof(New_entityOne));

我需要更新网站上的文档...每当我有机会时:)

修改

网站已更新:http://dynamicsvalue.com/get-started/nn-relationships