Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataWeb / Design / system / Data / EntityModel / EntityClassGenerator.cs / 1 / EntityClassGenerator.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Data.Services.Design.Common; using System.Data.EntityModel; using System.Data.EntityModel.SchemaObjectModel; using System.Data.Metadata.Edm; using System.Diagnostics; using System.IO; using System.Xml; namespace System.Data.Common.Utils { internal static class EntityUtil { static internal void CheckArgumentNull(T value, string parameterName) where T : class { System.Data.Services.Design.EntityUtil.CheckArgumentNull (value, parameterName); } } } namespace System.Data.Services.Design { internal static class EntityUtil { static internal ArgumentException Argument(string error, string parameter) { ArgumentException e = new ArgumentException(error, parameter); return e; } static internal ArgumentNullException ArgumentNull(string parameter) { ArgumentNullException e = new ArgumentNullException(parameter); return e; } internal static void ThrowArgumentNullException(string parameterName) { throw ArgumentNull(parameterName); } static internal ArgumentException InvalidStringArgument(string parameterName) { return Argument(Strings.InvalidStringArgument(parameterName), parameterName); } static internal void CheckArgumentNull (T value, string parameterName) where T : class { if (null == value) { ThrowArgumentNullException(parameterName); } } static internal void CheckStringArgument(string value, string parameterName) { // Throw ArgumentNullException when string is null CheckArgumentNull(value, parameterName); // Throw ArgumentException when string is empty if (value.Length == 0) { throw InvalidStringArgument(parameterName); } } } /// /// Summary description for CodeGenerator. /// public sealed class EntityClassGenerator { #region Instance Fields LanguageOption _languageOption = LanguageOption.GenerateCSharpCode; EdmToObjectNamespaceMap _edmToObjectNamespaceMap = new EdmToObjectNamespaceMap(); #endregion #region Events ////// The event that is raised when a type is generated /// public event EventHandlerOnTypeGenerated; /// /// The event that is raised when a property is generated /// public event EventHandlerOnPropertyGenerated; #endregion #region Public Methods /// /// /// public EntityClassGenerator() { } ////// /// public EntityClassGenerator(LanguageOption languageOption) { _languageOption = EDesignUtil.CheckLanguageOptionArgument(languageOption, "languageOption"); } ////// Gets and Sets the Language to use for code generation. /// public LanguageOption LanguageOption { get { return _languageOption; } set { _languageOption = EDesignUtil.CheckLanguageOptionArgument(value, "value"); } } ////// Gets the map entries use to customize the namespace of .net types that are generated /// and referenced by the generated code /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] public EdmToObjectNamespaceMap EdmToObjectNamespaceMap { get { return _edmToObjectNamespaceMap; } } public IListGenerateCode(XmlReader sourceReader, string targetFilePath) { EntityUtil.CheckArgumentNull(sourceReader, "sourceReader"); EntityUtil.CheckStringArgument(targetFilePath, "targetPath"); using (LazyTextWriterCreator target = new LazyTextWriterCreator(targetFilePath)) { // we do want to close the file return GenerateCode(sourceReader, target, null); } } /// /// Generate code by reading an EDMX schema from an XmlReader and outputting the code into a TextWriter /// /// Reader with a EDMX schema in it /// Target writer for the generated code /// Prefix to use for generated namespaces ////// Note that the NamespacePrefix is used as the only namespace for types in the same namespace /// as the default container, and as a prefix for the server-provided namespace for everything else. If /// this argument is null, the server-provided namespaces are used for all types. /// ///public IList GenerateCode(XmlReader sourceReader, TextWriter targetWriter, string namespacePrefix) { EntityUtil.CheckArgumentNull(sourceReader, "sourceReader"); EntityUtil.CheckArgumentNull(targetWriter, "targetWriter"); using (LazyTextWriterCreator target = new LazyTextWriterCreator(targetWriter)) { return GenerateCode(sourceReader, target, namespacePrefix); } // does not actually close the targetWriter - that is the caller's responsibility } private IList GenerateCode(XmlReader sourceReader, LazyTextWriterCreator target, string namespacePrefix) { NameTable nameTable = new NameTable(); const string DataWebMetadataNamespacePrefix = "m"; const string EdmxNamespacePrefix = "edmx"; const string DataWebMetadataNamespace = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; const string EdmV1Namespace = "http://schemas.microsoft.com/ado/2006/04/edm"; const string EdmV2Namespace = "http://schemas.microsoft.com/ado/2007/05/edm"; const string EdmxNamespace = "http://schemas.microsoft.com/ado/2007/06/edmx"; XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable); namespaceManager.AddNamespace(DataWebMetadataNamespacePrefix, DataWebMetadataNamespace); namespaceManager.AddNamespace(EdmxNamespacePrefix, EdmxNamespace); namespaceManager.AddNamespace("edmv1", EdmV1Namespace); namespaceManager.AddNamespace("edmv2", EdmV2Namespace); XmlDocument document = new XmlDocument(nameTable); document.Load(sourceReader); List readers = new List (); // Look for 1.0 schema elements XmlNodeList nodeList = document.SelectNodes("//edmv1:Schema", namespaceManager); for (int i = 0; i < nodeList.Count; i++) { readers.Add(nodeList[i].CreateNavigator().ReadSubtree()); } // Look for 1.1 schema elements nodeList = document.SelectNodes("//edmv2:Schema", namespaceManager); for (int i = 0; i < nodeList.Count; i++) { readers.Add(nodeList[i].CreateNavigator().ReadSubtree()); } List errors = new List (); EdmItemCollection itemCollection = new EdmItemCollection(readers); // generate code ClientApiGenerator generator = new ClientApiGenerator(null, itemCollection, this, errors, namespacePrefix); generator.GenerateCode(target); return errors; } #endregion #region Event Helpers /// /// Helper method that raises the TypeGenerated event /// /// The event arguments passed to the subscriber internal void RaiseTypeGeneratedEvent(TypeGeneratedEventArgs eventArgs) { if (this.OnTypeGenerated != null) { this.OnTypeGenerated(this, eventArgs); } } ////// Helper method that raises the PropertyGenerated event /// /// The event arguments passed to the subscriber internal void RaisePropertyGeneratedEvent(PropertyGeneratedEventArgs eventArgs) { if (this.OnPropertyGenerated != null) { this.OnPropertyGenerated(this, eventArgs); } } #endregion } } // 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.Data.Services.Design.Common; using System.Data.EntityModel; using System.Data.EntityModel.SchemaObjectModel; using System.Data.Metadata.Edm; using System.Diagnostics; using System.IO; using System.Xml; namespace System.Data.Common.Utils { internal static class EntityUtil { static internal void CheckArgumentNull(T value, string parameterName) where T : class { System.Data.Services.Design.EntityUtil.CheckArgumentNull (value, parameterName); } } } namespace System.Data.Services.Design { internal static class EntityUtil { static internal ArgumentException Argument(string error, string parameter) { ArgumentException e = new ArgumentException(error, parameter); return e; } static internal ArgumentNullException ArgumentNull(string parameter) { ArgumentNullException e = new ArgumentNullException(parameter); return e; } internal static void ThrowArgumentNullException(string parameterName) { throw ArgumentNull(parameterName); } static internal ArgumentException InvalidStringArgument(string parameterName) { return Argument(Strings.InvalidStringArgument(parameterName), parameterName); } static internal void CheckArgumentNull (T value, string parameterName) where T : class { if (null == value) { ThrowArgumentNullException(parameterName); } } static internal void CheckStringArgument(string value, string parameterName) { // Throw ArgumentNullException when string is null CheckArgumentNull(value, parameterName); // Throw ArgumentException when string is empty if (value.Length == 0) { throw InvalidStringArgument(parameterName); } } } /// /// Summary description for CodeGenerator. /// public sealed class EntityClassGenerator { #region Instance Fields LanguageOption _languageOption = LanguageOption.GenerateCSharpCode; EdmToObjectNamespaceMap _edmToObjectNamespaceMap = new EdmToObjectNamespaceMap(); #endregion #region Events ////// The event that is raised when a type is generated /// public event EventHandlerOnTypeGenerated; /// /// The event that is raised when a property is generated /// public event EventHandlerOnPropertyGenerated; #endregion #region Public Methods /// /// /// public EntityClassGenerator() { } ////// /// public EntityClassGenerator(LanguageOption languageOption) { _languageOption = EDesignUtil.CheckLanguageOptionArgument(languageOption, "languageOption"); } ////// Gets and Sets the Language to use for code generation. /// public LanguageOption LanguageOption { get { return _languageOption; } set { _languageOption = EDesignUtil.CheckLanguageOptionArgument(value, "value"); } } ////// Gets the map entries use to customize the namespace of .net types that are generated /// and referenced by the generated code /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] public EdmToObjectNamespaceMap EdmToObjectNamespaceMap { get { return _edmToObjectNamespaceMap; } } public IListGenerateCode(XmlReader sourceReader, string targetFilePath) { EntityUtil.CheckArgumentNull(sourceReader, "sourceReader"); EntityUtil.CheckStringArgument(targetFilePath, "targetPath"); using (LazyTextWriterCreator target = new LazyTextWriterCreator(targetFilePath)) { // we do want to close the file return GenerateCode(sourceReader, target, null); } } /// /// Generate code by reading an EDMX schema from an XmlReader and outputting the code into a TextWriter /// /// Reader with a EDMX schema in it /// Target writer for the generated code /// Prefix to use for generated namespaces ////// Note that the NamespacePrefix is used as the only namespace for types in the same namespace /// as the default container, and as a prefix for the server-provided namespace for everything else. If /// this argument is null, the server-provided namespaces are used for all types. /// ///public IList GenerateCode(XmlReader sourceReader, TextWriter targetWriter, string namespacePrefix) { EntityUtil.CheckArgumentNull(sourceReader, "sourceReader"); EntityUtil.CheckArgumentNull(targetWriter, "targetWriter"); using (LazyTextWriterCreator target = new LazyTextWriterCreator(targetWriter)) { return GenerateCode(sourceReader, target, namespacePrefix); } // does not actually close the targetWriter - that is the caller's responsibility } private IList GenerateCode(XmlReader sourceReader, LazyTextWriterCreator target, string namespacePrefix) { NameTable nameTable = new NameTable(); const string DataWebMetadataNamespacePrefix = "m"; const string EdmxNamespacePrefix = "edmx"; const string DataWebMetadataNamespace = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; const string EdmV1Namespace = "http://schemas.microsoft.com/ado/2006/04/edm"; const string EdmV2Namespace = "http://schemas.microsoft.com/ado/2007/05/edm"; const string EdmxNamespace = "http://schemas.microsoft.com/ado/2007/06/edmx"; XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable); namespaceManager.AddNamespace(DataWebMetadataNamespacePrefix, DataWebMetadataNamespace); namespaceManager.AddNamespace(EdmxNamespacePrefix, EdmxNamespace); namespaceManager.AddNamespace("edmv1", EdmV1Namespace); namespaceManager.AddNamespace("edmv2", EdmV2Namespace); XmlDocument document = new XmlDocument(nameTable); document.Load(sourceReader); List readers = new List (); // Look for 1.0 schema elements XmlNodeList nodeList = document.SelectNodes("//edmv1:Schema", namespaceManager); for (int i = 0; i < nodeList.Count; i++) { readers.Add(nodeList[i].CreateNavigator().ReadSubtree()); } // Look for 1.1 schema elements nodeList = document.SelectNodes("//edmv2:Schema", namespaceManager); for (int i = 0; i < nodeList.Count; i++) { readers.Add(nodeList[i].CreateNavigator().ReadSubtree()); } List errors = new List (); EdmItemCollection itemCollection = new EdmItemCollection(readers); // generate code ClientApiGenerator generator = new ClientApiGenerator(null, itemCollection, this, errors, namespacePrefix); generator.GenerateCode(target); return errors; } #endregion #region Event Helpers /// /// Helper method that raises the TypeGenerated event /// /// The event arguments passed to the subscriber internal void RaiseTypeGeneratedEvent(TypeGeneratedEventArgs eventArgs) { if (this.OnTypeGenerated != null) { this.OnTypeGenerated(this, eventArgs); } } ////// Helper method that raises the PropertyGenerated event /// /// The event arguments passed to the subscriber internal void RaisePropertyGeneratedEvent(PropertyGeneratedEventArgs eventArgs) { if (this.OnPropertyGenerated != null) { this.OnPropertyGenerated(this, eventArgs); } } #endregion } } // 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
- ParserExtension.cs
- Point3D.cs
- InputLangChangeRequestEvent.cs
- RawStylusInputReport.cs
- HMACSHA384.cs
- FileDialogCustomPlace.cs
- WebPart.cs
- ProxyWebPartManager.cs
- SpecularMaterial.cs
- NullRuntimeConfig.cs
- FormViewPageEventArgs.cs
- FacetDescription.cs
- ProfileBuildProvider.cs
- DesignTimeTemplateParser.cs
- TimerEventSubscription.cs
- IBuiltInEvidence.cs
- SqlCacheDependencyDatabaseCollection.cs
- BufferModesCollection.cs
- XamlVector3DCollectionSerializer.cs
- Publisher.cs
- DataControlHelper.cs
- RotateTransform3D.cs
- WebScriptEndpointElement.cs
- AccessibleObject.cs
- XmlSerializerNamespaces.cs
- PageStatePersister.cs
- DesignTimeXamlWriter.cs
- ResourceCategoryAttribute.cs
- ParallelTimeline.cs
- VisualBrush.cs
- PersistenceProviderBehavior.cs
- BamlLocalizabilityResolver.cs
- KeyConverter.cs
- ControlAdapter.cs
- WindowsClientCredential.cs
- smtpconnection.cs
- SiteMapNode.cs
- EntityClientCacheEntry.cs
- DbProviderManifest.cs
- OracleCommandBuilder.cs
- BitmapImage.cs
- HostProtectionException.cs
- ParamArrayAttribute.cs
- SqlExpander.cs
- MdImport.cs
- OdbcDataAdapter.cs
- InstalledFontCollection.cs
- KeyGesture.cs
- SqlNotificationEventArgs.cs
- KeyBinding.cs
- SingleResultAttribute.cs
- VarRefManager.cs
- StatusBarPanel.cs
- BaseTemplateBuildProvider.cs
- LocalizableAttribute.cs
- SafeRightsManagementQueryHandle.cs
- SchemaAttDef.cs
- _SafeNetHandles.cs
- BamlResourceContent.cs
- Baml2006KeyRecord.cs
- CacheEntry.cs
- Matrix3DStack.cs
- SoapProcessingBehavior.cs
- SqlPersonalizationProvider.cs
- ReliabilityContractAttribute.cs
- ReversePositionQuery.cs
- GacUtil.cs
- OlePropertyStructs.cs
- ItemTypeToolStripMenuItem.cs
- OperatorExpressions.cs
- GetPageCompletedEventArgs.cs
- PropertyItemInternal.cs
- XmlQueryType.cs
- ContainerActivationHelper.cs
- GridViewSelectEventArgs.cs
- TextDecorationLocationValidation.cs
- DataGridViewCellLinkedList.cs
- UIElementParagraph.cs
- PolicyLevel.cs
- InputBinder.cs
- EventRouteFactory.cs
- SpecialNameAttribute.cs
- SafeWaitHandle.cs
- NumericUpDown.cs
- SplitterPanel.cs
- TextTreeRootTextBlock.cs
- mansign.cs
- UnSafeCharBuffer.cs
- HttpVersion.cs
- RootBuilder.cs
- DataConnectionHelper.cs
- ProcessModelInfo.cs
- SqlClientFactory.cs
- Panel.cs
- WindowsImpersonationContext.cs
- TypeValidationEventArgs.cs
- SelectedGridItemChangedEvent.cs
- ContextActivityUtils.cs
- SafeNativeMethods.cs
- InlineUIContainer.cs