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); }
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."); } } }
public EntityRelationType(string name, ModelRelationshipType type, EntityRelationDirection direction) { Name = name; Type = type; Direction = direction; }
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) { }
public virtual ConnectorType GetConnectorType(ModelRelationshipType type) => ConnectorTypes.Generalization;
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)); }