public static EditingContext GetEditingContext(this EFArtifact artifact)
        {
            Debug.Assert(artifact != null, "artifact != null");

            var service = new EFArtifactService(artifact);
            var editingContext = new EditingContext();
            editingContext.SetEFArtifactService(service);
            return editingContext;
        }
        private static FeatureState IsFeatureEnabledForArtifact(Version schemaVersion, Func<EFArtifact, FeatureState> funcToTest)
        {
            using (var editingContext = new EditingContext())
            {
                var modelManager = new Mock<ModelManager>(null, null).Object;
                var modelProvider = new Mock<XmlModelProvider>().Object;

                var entityDesignArtifactMock =
                    new Mock<EntityDesignArtifact>(modelManager, new Uri("urn:dummy"), modelProvider);

                editingContext.SetEFArtifactService(new EFArtifactService(entityDesignArtifactMock.Object));

                entityDesignArtifactMock.Setup(a => a.SchemaVersion).Returns(schemaVersion);
                entityDesignArtifactMock.Setup(a => a.EditingContext).Returns(editingContext);

                return funcToTest(entityDesignArtifactMock.Object);
            }
        }
        internal EditingContext GetNewOrExistingContext(Uri itemUri)
        {
            EditingContext itemContext = null;

            // creating a new context is an expensive operation, so optimize for the case where it exists
            var item = _package.ModelManager.GetArtifact(itemUri);
            if (item != null)
            {
                _mapArtifactToEditingContext.TryGetValue(item, out itemContext);
            }

            // there isn't one, so call the path that will create it
            if (itemContext == null)
            {
                item = GetNewOrExistingArtifact(itemUri);
                if (itemUri != null
                    && item != null
                    && !_mapArtifactToEditingContext.TryGetValue(item, out itemContext))
                {
                    var service = new EFArtifactService(item);

                    var editingContext = new EditingContext();
                    editingContext.SetEFArtifactService(service);
                    itemContext = editingContext;
                    _mapArtifactToEditingContext[item] = itemContext;
                }
            }

            return itemContext;
        }