示例#1
0
        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);
        }
示例#2
0
        private static void GetOrAddRelationship(Model model, IModelEntity sourceEntity, ModelRelationshipType relationshipType, int repeat)
        {
            var targetEntities = model.Entities.Except(sourceEntity.ToEnumerable()).ToArray();

            for (int i = 0; i < repeat; i++)
            {
                var relationship = model.GetOrAddRelationship(sourceEntity, targetEntities[i], relationshipType);
                if (relationship == null)
                {
                    throw new Exception("Relationship is null.");
                }
            }
        }
示例#3
0
 public EntityRelationType(string name, ModelRelationshipType type, EntityRelationDirection direction)
 {
     Name      = name;
     Type      = type;
     Direction = direction;
 }
示例#4
0
        public virtual ModelRelationship GetOrAddRelationship(IModelEntity sourceEntity, IModelEntity targetEntity, ModelRelationshipType relationType)
        {
            var relationship = new ModelRelationship(sourceEntity, targetEntity, relationType);

            return(this.GetOrAddRelationship(relationship));
        }
 public ModelRelationship(IModelEntity source, IModelEntity target, ModelRelationshipType type)
     : this(source, target, type.Classifier, type.Stereotype)
 {
 }
示例#6
0
 public virtual ConnectorType GetConnectorType(ModelRelationshipType type) => ConnectorTypes.Generalization;
示例#7
0
 public override ConnectorType GetConnectorType(ModelRelationshipType type)
 {
     return(type.Stereotype == ModelRelationshipStereotypes.Implementation
         ? RoslynBasedConnectorTypes.Implementation
         : ConnectorTypes.Generalization);
 }
 public bool Equals(ModelRelationshipType other)
 {
     return(Classifier == other.Classifier && Stereotype.Equals(other.Stereotype));
 }