Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / Entity / Design / AspNet / EntityDesignerBuildProvider.cs / 1305376 / EntityDesignerBuildProvider.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Collections.Generic;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Globalization;
using System.IO;
using System.Text;
using System.Web.Hosting;
using System.Web.Compilation;
using System.Xml;
using System.Data.Metadata.Edm;
namespace System.Data.Entity.Design.AspNet
{
///
/// The ASP .NET Build provider for the CSDL in ADO .NET
///
///
[BuildProviderAppliesTo(BuildProviderAppliesTo.Code)]
public class EntityDesignerBuildProvider : System.Web.Compilation.BuildProvider
{
///
/// Default constructor
///
public EntityDesignerBuildProvider()
{
}
///
/// We want ASP .NET to always reset the app domain when we have to rebuild
///
///
///
public override BuildProviderResultFlags GetResultFlags(CompilerResults results)
{
return BuildProviderResultFlags.ShutdownAppDomainOnChange;
}
///
/// Extract the CSDL, SSDL and MSL nodes from the EDMX file and store them
/// as embedded resources
///
///
public override void GenerateCode(AssemblyBuilder assemblyBuilder)
{
using (StreamReader edmxInputStream = new StreamReader(VirtualPathProvider.OpenFile(base.VirtualPath)))
{
// load up an XML document representing the edmx file
XmlElement conceptualSchemaElement;
XmlElement mappingElement;
XmlElement storageSchemaElement;
string embedAsResourcePropertyValue;
EntityDesignerUtils.ExtractConceptualMappingAndStorageNodes(edmxInputStream, out conceptualSchemaElement, out mappingElement, out storageSchemaElement, out embedAsResourcePropertyValue);
if (null == conceptualSchemaElement)
{
throw new XmlException("No Conceptual Schema node to embed as a resource", null, 0, 0);
}
if (null == storageSchemaElement)
{
throw new XmlException("No Storage Schema node to embed as a resource", null, 0, 0);
}
if (null == mappingElement)
{
throw new XmlException("No Mapping node to embed as a resource", null, 0, 0);
}
// construct output paths where the CSDL/MSL/SSDL resources will be placed
string virtualPathPrefix = base.VirtualPath.Replace(EntityDesignerUtils._edmxFileExtension, String.Empty);
string csdlResourceName = BuildProviderUtils.GetResourceNameForVirtualPath(virtualPathPrefix + XmlConstants.CSpaceSchemaExtension);
string ssdlResourceName = BuildProviderUtils.GetResourceNameForVirtualPath(virtualPathPrefix + XmlConstants.SSpaceSchemaExtension);
string mslResourceName = BuildProviderUtils.GetResourceNameForVirtualPath(virtualPathPrefix + XmlConstants.CSSpaceSchemaExtension);
SetupEmbeddedResource(assemblyBuilder, this, conceptualSchemaElement, csdlResourceName);
SetupEmbeddedResource(assemblyBuilder, this, storageSchemaElement, ssdlResourceName);
SetupEmbeddedResource(assemblyBuilder, this, mappingElement, mslResourceName);
}
}
private static void SetupEmbeddedResource(AssemblyBuilder assemblyBuilder,
BuildProvider prov, XmlElement xmlElement, string resourceName)
{
using (Stream resStream = assemblyBuilder.CreateEmbeddedResource(prov, resourceName))
{
EntityDesignerUtils.OutputXmlElementToStream(xmlElement, resStream);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Collections.Generic;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Globalization;
using System.IO;
using System.Text;
using System.Web.Hosting;
using System.Web.Compilation;
using System.Xml;
using System.Data.Metadata.Edm;
namespace System.Data.Entity.Design.AspNet
{
///
/// The ASP .NET Build provider for the CSDL in ADO .NET
///
///
[BuildProviderAppliesTo(BuildProviderAppliesTo.Code)]
public class EntityDesignerBuildProvider : System.Web.Compilation.BuildProvider
{
///
/// Default constructor
///
public EntityDesignerBuildProvider()
{
}
///
/// We want ASP .NET to always reset the app domain when we have to rebuild
///
///
///
public override BuildProviderResultFlags GetResultFlags(CompilerResults results)
{
return BuildProviderResultFlags.ShutdownAppDomainOnChange;
}
///
/// Extract the CSDL, SSDL and MSL nodes from the EDMX file and store them
/// as embedded resources
///
///
public override void GenerateCode(AssemblyBuilder assemblyBuilder)
{
using (StreamReader edmxInputStream = new StreamReader(VirtualPathProvider.OpenFile(base.VirtualPath)))
{
// load up an XML document representing the edmx file
XmlElement conceptualSchemaElement;
XmlElement mappingElement;
XmlElement storageSchemaElement;
string embedAsResourcePropertyValue;
EntityDesignerUtils.ExtractConceptualMappingAndStorageNodes(edmxInputStream, out conceptualSchemaElement, out mappingElement, out storageSchemaElement, out embedAsResourcePropertyValue);
if (null == conceptualSchemaElement)
{
throw new XmlException("No Conceptual Schema node to embed as a resource", null, 0, 0);
}
if (null == storageSchemaElement)
{
throw new XmlException("No Storage Schema node to embed as a resource", null, 0, 0);
}
if (null == mappingElement)
{
throw new XmlException("No Mapping node to embed as a resource", null, 0, 0);
}
// construct output paths where the CSDL/MSL/SSDL resources will be placed
string virtualPathPrefix = base.VirtualPath.Replace(EntityDesignerUtils._edmxFileExtension, String.Empty);
string csdlResourceName = BuildProviderUtils.GetResourceNameForVirtualPath(virtualPathPrefix + XmlConstants.CSpaceSchemaExtension);
string ssdlResourceName = BuildProviderUtils.GetResourceNameForVirtualPath(virtualPathPrefix + XmlConstants.SSpaceSchemaExtension);
string mslResourceName = BuildProviderUtils.GetResourceNameForVirtualPath(virtualPathPrefix + XmlConstants.CSSpaceSchemaExtension);
SetupEmbeddedResource(assemblyBuilder, this, conceptualSchemaElement, csdlResourceName);
SetupEmbeddedResource(assemblyBuilder, this, storageSchemaElement, ssdlResourceName);
SetupEmbeddedResource(assemblyBuilder, this, mappingElement, mslResourceName);
}
}
private static void SetupEmbeddedResource(AssemblyBuilder assemblyBuilder,
BuildProvider prov, XmlElement xmlElement, string resourceName)
{
using (Stream resStream = assemblyBuilder.CreateEmbeddedResource(prov, resourceName))
{
EntityDesignerUtils.OutputXmlElementToStream(xmlElement, resStream);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AsyncDataRequest.cs
- BatchParser.cs
- NetworkInterface.cs
- RetrieveVirtualItemEventArgs.cs
- ArgumentOutOfRangeException.cs
- GridViewRowEventArgs.cs
- DefaultAsyncDataDispatcher.cs
- FloatMinMaxAggregationOperator.cs
- Int32.cs
- WebBrowserEvent.cs
- AssemblyCache.cs
- Visual3D.cs
- ActivityContext.cs
- FormViewRow.cs
- ContentPlaceHolder.cs
- SafeCertificateStore.cs
- RenderData.cs
- WebPartEditorApplyVerb.cs
- DataTableReader.cs
- SocketAddress.cs
- ColorPalette.cs
- MyContact.cs
- CrossContextChannel.cs
- RadioButtonBaseAdapter.cs
- AppliedDeviceFiltersEditor.cs
- IncrementalReadDecoders.cs
- ScriptControlDescriptor.cs
- PersonalizationStateQuery.cs
- HostProtectionPermission.cs
- ZoneMembershipCondition.cs
- RSAProtectedConfigurationProvider.cs
- Visual3D.cs
- HandoffBehavior.cs
- AdjustableArrowCap.cs
- DataGridViewMethods.cs
- CollectionViewGroupRoot.cs
- XmlRawWriter.cs
- TextServicesContext.cs
- InvalidCastException.cs
- TreeWalker.cs
- ProviderSettings.cs
- linebase.cs
- Mappings.cs
- DataGridColumnsPage.cs
- SystemInformation.cs
- Site.cs
- BitmapPalette.cs
- AncestorChangedEventArgs.cs
- MenuItemBinding.cs
- DataObjectCopyingEventArgs.cs
- ActivityExecutorDelegateInfo.cs
- ExpressionValueEditor.cs
- WindowsAuthenticationEventArgs.cs
- shaper.cs
- SupportingTokenDuplexChannel.cs
- StoreAnnotationsMap.cs
- XmlSchemaImport.cs
- GridItemPattern.cs
- TemplateControl.cs
- ProgressBarRenderer.cs
- EmissiveMaterial.cs
- ToolStripSystemRenderer.cs
- FileChangeNotifier.cs
- SuppressIldasmAttribute.cs
- DispatcherExceptionFilterEventArgs.cs
- MeasurementDCInfo.cs
- CodeIdentifier.cs
- XmlSchemaSimpleTypeRestriction.cs
- SafeFileMapViewHandle.cs
- SQLRoleProvider.cs
- IFlowDocumentViewer.cs
- DataGridViewColumnStateChangedEventArgs.cs
- SqlRowUpdatedEvent.cs
- ValidationErrorInfo.cs
- GeneralTransform2DTo3DTo2D.cs
- XmlLoader.cs
- EdmProviderManifest.cs
- Expression.cs
- mansign.cs
- XmlDictionaryString.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- WebBrowserDesigner.cs
- TransactionFilter.cs
- XhtmlBasicTextBoxAdapter.cs
- GridItemProviderWrapper.cs
- BaseTemplateBuildProvider.cs
- ToolBarTray.cs
- FileDialogCustomPlace.cs
- Axis.cs
- CallSiteBinder.cs
- MissingManifestResourceException.cs
- FormsIdentity.cs
- FrameworkElement.cs
- RuntimeCompatibilityAttribute.cs
- KeyedQueue.cs
- CodeTypeReference.cs
- InfoCardRSACryptoProvider.cs
- ZipIOFileItemStream.cs
- ConfigurationElementCollection.cs
- CfgParser.cs