public void GetOrAddRelationship_IsThreadSafe()
        {
            const int repeat = 100;

            var model = new Model();

            var sourceEntity = model.GetOrAddEntity(i => true, () => new TestModelEntity());

            for (int i = 0; i < repeat; i++)
            {
                var testModelEntity = new TestModelEntity(i.ToString());
                model.GetOrAddEntity(testModelEntity);
            }

            var relationshipType = new ModelRelationshipType(ModelRelationshipClassifier.Generalization, ModelRelationshipStereotype.None);

            var tasks = new List <Task>
            {
                Task.Run(() => GetOrAddRelationship(model, sourceEntity, relationshipType, repeat)),
                Task.Run(() => GetOrAddRelationship(model, sourceEntity, relationshipType, repeat)),
                Task.Run(() => GetOrAddRelationship(model, sourceEntity, relationshipType, repeat)),
            };

            Task.WaitAll(tasks.ToArray());

            model.Relationships.Count.ShouldBeEquivalentTo(repeat);
        }
 protected TestModelDto Map(TestModelEntity source)
 {
     return(Map <TestModelDto>(source));
 }