public void ShouldPersistValuesOnImplementationTechnologyChangeRule()
        {
            Store             store = new Store(typeof(CoreDesignSurfaceDomainModel), typeof(Microsoft.Practices.ServiceFactory.DataContracts.DataContractDslDomainModel));
            DataContractModel dcModel;
            DataContract      dcElement;

            using (Transaction transaction = store.TransactionManager.BeginTransaction())
            {
                dcModel   = store.ElementFactory.CreateElement(DataContractModel.DomainClassId) as DataContractModel;
                dcElement = store.ElementFactory.CreateElement(DataContract.DomainClassId) as DataContract;

                dcModel.Contracts.Add(dcElement);
                dcModel.ImplementationTechnology = new DataContractAsmxExtensionProvider();

                Assert.IsNotNull(dcElement, "DataContract is null");
                Assert.IsNotNull(dcElement.DataContractModel.ImplementationTechnology, "ImplementationTechnology is null");

                // fire rules on commit
                transaction.Commit();
            }

            AsmxDataContract asmxExtender = dcElement.ObjectExtender as AsmxDataContract;

            Assert.IsNotNull(asmxExtender, "ObjectExtender is null");
            // store some value to compare later
            asmxExtender.OrderParts = true;

            using (Transaction transaction = store.TransactionManager.BeginTransaction())
            {
                dcModel.ImplementationTechnology = new DataContractWcfExtensionProvider();
                // fire rules on commit
                transaction.Commit();
            }

            // now we should have the WCF extender
            WCFDataContract wcfExtender = dcElement.ObjectExtender as WCFDataContract;

            Assert.IsNotNull(wcfExtender, "ObjectExtender is null");

            // get back the ASMX extender and check values
            using (Transaction transaction = store.TransactionManager.BeginTransaction())
            {
                dcModel.ImplementationTechnology = new DataContractAsmxExtensionProvider();
                // fire rules on commit
                transaction.Commit();
            }

            asmxExtender = dcElement.ObjectExtender as AsmxDataContract;
            Assert.IsNotNull(asmxExtender, "ObjectExtender is null");
            Assert.IsTrue(asmxExtender.OrderParts, "OrderParts in ASMX extender was not persisted");

            // check for ObjectExtenderContainer final state
            Assert.IsNotNull(dcElement.ObjectExtenderContainer, "ObjectExtenderContainer is null");
            Assert.AreEqual <int>(2, dcElement.ObjectExtenderContainer.ObjectExtenders.Count, "Extender count is not 2");
        }
        protected override ModelElement ResolveModelElement(string instanceNamespace)
        {
            if (this.processFault)
            {
                return(ResolveFaultElement(instanceNamespace));
            }

            using (Transaction transaction = DataContractStore.TransactionManager.BeginTransaction())
            {
                DataContract dc = new DataContract(DataContractStore);
                dc.DataContractModel = new DataContractModel(DataContractStore);
                dc.DataContractModel.ProjectMappingTable = "WCF";
                dc.Name = instanceNamespace;
                WCFDataContract extender = new WCFDataContract();
                dc.ObjectExtender     = extender;
                extender.ModelElement = dc;
                transaction.Commit();
                return(dc);
            }
        }
		protected override ModelElement ResolveModelElement(string instanceNamespace)
		{
			if (this.processFault)
			{
				return ResolveFaultElement(instanceNamespace);
			}

			using (Transaction transaction = DataContractStore.TransactionManager.BeginTransaction())
			{
				DataContract dc = new DataContract(DataContractStore);
				dc.DataContractModel = new DataContractModel(DataContractStore);
				dc.DataContractModel.ProjectMappingTable = "WCF";
				dc.Name = instanceNamespace;
				WCFDataContract extender = new WCFDataContract();
				dc.ObjectExtender = extender;
				extender.ModelElement = dc;
				transaction.Commit();
				return dc;
			}
		}