Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntityDesign / Design / System / Data / Entity / Design / AspNet / EntityDesignerBuildProvider.cs / 1 / 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 conceptualVirtualPath = virtualPathPrefix + XmlConstants.CSpaceSchemaExtension;
string storageVirtualPath = virtualPathPrefix + XmlConstants.SSpaceSchemaExtension;
string mappingVirtualPath = virtualPathPrefix + XmlConstants.CSSpaceSchemaExtension;
SetupEmbeddedResource(assemblyBuilder, this, conceptualSchemaElement, conceptualVirtualPath);
SetupEmbeddedResource(assemblyBuilder, this, storageSchemaElement, storageVirtualPath);
SetupEmbeddedResource(assemblyBuilder, this, mappingElement, mappingVirtualPath);
}
}
private static void SetupEmbeddedResource(AssemblyBuilder assemblyBuilder,
BuildProvider prov, XmlElement xmlElement, string resourcePath)
{
// derive the resource name
string name = resourcePath.Replace("/", ".");
if (name.StartsWith(".", StringComparison.Ordinal))
{
name = name.Substring(1);
}
using (Stream resStream = assemblyBuilder.CreateEmbeddedResource(prov, name))
{
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 conceptualVirtualPath = virtualPathPrefix + XmlConstants.CSpaceSchemaExtension;
string storageVirtualPath = virtualPathPrefix + XmlConstants.SSpaceSchemaExtension;
string mappingVirtualPath = virtualPathPrefix + XmlConstants.CSSpaceSchemaExtension;
SetupEmbeddedResource(assemblyBuilder, this, conceptualSchemaElement, conceptualVirtualPath);
SetupEmbeddedResource(assemblyBuilder, this, storageSchemaElement, storageVirtualPath);
SetupEmbeddedResource(assemblyBuilder, this, mappingElement, mappingVirtualPath);
}
}
private static void SetupEmbeddedResource(AssemblyBuilder assemblyBuilder,
BuildProvider prov, XmlElement xmlElement, string resourcePath)
{
// derive the resource name
string name = resourcePath.Replace("/", ".");
if (name.StartsWith(".", StringComparison.Ordinal))
{
name = name.Substring(1);
}
using (Stream resStream = assemblyBuilder.CreateEmbeddedResource(prov, name))
{
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
- ContentPlaceHolder.cs
- NativeObjectSecurity.cs
- Utils.cs
- Control.cs
- StaticResourceExtension.cs
- CodeGroup.cs
- HostingEnvironmentSection.cs
- KeyInterop.cs
- ParseChildrenAsPropertiesAttribute.cs
- TrackingProfile.cs
- SafeArchiveContext.cs
- XmlCodeExporter.cs
- Ray3DHitTestResult.cs
- OutOfProcStateClientManager.cs
- TableStyle.cs
- CopyAttributesAction.cs
- PagerSettings.cs
- TextTrailingCharacterEllipsis.cs
- XmlCharCheckingReader.cs
- TextDecoration.cs
- BindingManagerDataErrorEventArgs.cs
- DocumentViewer.cs
- AssemblyUtil.cs
- Pen.cs
- HttpConfigurationSystem.cs
- ApplicationServiceManager.cs
- LightweightEntityWrapper.cs
- SystemIPv6InterfaceProperties.cs
- LockCookie.cs
- PathGeometry.cs
- DataContract.cs
- DbConnectionPoolGroupProviderInfo.cs
- LineUtil.cs
- SendDesigner.xaml.cs
- CompilerGlobalScopeAttribute.cs
- BindingEntityInfo.cs
- ListenerChannelContext.cs
- DbParameterCollectionHelper.cs
- DataBinding.cs
- Timer.cs
- WebPartDeleteVerb.cs
- SettingsPropertyValue.cs
- ModifierKeysValueSerializer.cs
- QueryExpr.cs
- XmlNotation.cs
- SectionXmlInfo.cs
- StorageComplexPropertyMapping.cs
- ChtmlMobileTextWriter.cs
- _NegoState.cs
- SqlUtils.cs
- ReadOnlyTernaryTree.cs
- MessageSmuggler.cs
- ToolStripItemDesigner.cs
- TreeSet.cs
- HeaderPanel.cs
- RegexInterpreter.cs
- MenuItemBindingCollection.cs
- _NestedMultipleAsyncResult.cs
- compensatingcollection.cs
- BitmapDownload.cs
- MenuAutoFormat.cs
- DataGridViewBand.cs
- HatchBrush.cs
- HttpApplication.cs
- UiaCoreApi.cs
- UnsafeNativeMethods.cs
- OutputCacheProfileCollection.cs
- SmiRequestExecutor.cs
- StringWriter.cs
- Int32RectConverter.cs
- QuestionEventArgs.cs
- Thread.cs
- InternalCompensate.cs
- SymbolPair.cs
- ConnectionAcceptor.cs
- ConstNode.cs
- pingexception.cs
- EmitterCache.cs
- HttpRequestCacheValidator.cs
- CompressedStack.cs
- AuthenticationConfig.cs
- CssTextWriter.cs
- UrlPath.cs
- EventData.cs
- LinqDataSourceHelper.cs
- ContainerFilterService.cs
- VisualProxy.cs
- ObjectParameter.cs
- DesignerSelectionListAdapter.cs
- ScalarConstant.cs
- Bind.cs
- SmtpNtlmAuthenticationModule.cs
- OracleInternalConnection.cs
- _CookieModule.cs
- ButtonStandardAdapter.cs
- QilTypeChecker.cs
- SectionInput.cs
- UnorderedHashRepartitionStream.cs
- DocumentReference.cs
- ApplicationDirectoryMembershipCondition.cs