CRM 2016 FakeXrmEasy N:N relationships

≡放荡痞女 提交于 2019-12-01 20:11:44

问题


I'm trying to use FakeXrmEasy to perform some unit tests for CRM Online (2016) and I'm having problems setting up one of my tests with an N:N relationship

The following code sets up a Faked Context with 2 entities in it and initializes a Faked Organization Service:

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();

I then try to create an N:N relationship between these entities:

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);

When I execute this Request, I'm expecting a N:N-join record to be produced in my mock data, between entity1 and entity2

Instead I'm getting an error like this:

An exception of type 'System.Exception' occurred in FakeXrmEasy.dll but was not handled in user code

Additional information: Relationship new_entityOne_new_entityTwo does not exist in the metadata cache

Has anyone else tried using this unit framework in this way? Up until this point I have been getting really good results using it.

obviously, these are not my actual entity and relationship names


回答1:


Please try adding a fake relationship as shown here

This is because for N:1 there's no intersect table, joins are performed via an EntityReference and that's it, but for many to many, as there is an intersect table, we need to tell the framework how to deal with this scenario for now.

There was also an update where it is no longer mandatory to use ProxyTypesAssembly, as long as you use early bound types, the proxy types assembly will be "guessed" from your types.

So you could remove this

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

I'll need to update the documentation in the web site... whenever I have a chance :)

Edit

Web site updated: http://dynamicsvalue.com/get-started/nn-relationships



来源:https://stackoverflow.com/questions/37317808/crm-2016-fakexrmeasy-nn-relationships

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!