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 / Emitters / ClientApiGenerator.cs / 1 / ClientApiGenerator.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.CodeDom; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.Data.Services.Design; using System.Data.EntityModel.Emitters; using System.Data.EntityModel.SchemaObjectModel; using SOM = System.Data.EntityModel.SchemaObjectModel; using System.Data.Metadata.Edm; using System.Diagnostics; using System.IO; using System.Linq; namespace System.Data.Metadata.Edm { internal static partial class Helper { internal static bool IsCollectionType(GlobalItem item) { return (BuiltInTypeKind.CollectionType == item.BuiltInTypeKind); } internal static bool IsComplexType(EdmType type) { return (BuiltInTypeKind.ComplexType == type.BuiltInTypeKind); } internal static bool IsEntitySet(EntitySetBase entitySetBase) { return BuiltInTypeKind.EntitySet == entitySetBase.BuiltInTypeKind; } internal static bool IsPrimitiveType(EdmType type) { return (BuiltInTypeKind.PrimitiveType == type.BuiltInTypeKind); } } internal static class TypeSemantics { internal static bool IsComplexType(TypeUsage type) { return Helper.IsComplexType(type.EdmType); } } internal static class EdmProviderManifest { // System Facet Info ////// Name of the MaxLength Facet /// internal const string MaxLengthFacetName = "MaxLength"; ////// Name of the Unicode Facet /// internal const string UnicodeFacetName = "Unicode"; ////// Name of the FixedLength Facet /// internal const string FixedLengthFacetName = "FixedLength"; ////// Name of the DateTimeKind Facet /// internal const string DateTimeKindFacetName = "DateTimeKind"; ////// Name of the PreserveSeconds Facet /// internal const string PreserveSecondsFacetName = "PreserveSeconds"; ////// Name of the Precision Facet /// internal const string PrecisionFacetName = "Precision"; ////// Name of the Scale Facet /// internal const string ScaleFacetName = "Scale"; ////// Name of the Nullable Facet /// internal const string NullableFacetName = "Nullable"; ////// Name of the DefaultValue Facet /// internal const string DefaultValueFacetName = "DefaultValue"; ////////// Name of the DefaultType metadata property ///// //internal const string DefaultTypeMetadataPropertyName = "DefaultType"; ////// Name of the Collation Facet /// internal const string CollationFacetName = "Collation"; } internal static class TypeSystem { private static readonly System.Reflection.MethodInfo s_getDefaultMethod = typeof(TypeSystem).GetMethod("GetDefault", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); private static T GetDefault() { return default(T); } internal static object GetDefaultValue(Type type) { // null is always the default for non value types and Nullable<> if (!type.IsValueType || (type.IsGenericType && typeof(Nullable<>) == type.GetGenericTypeDefinition())) { return null; } System.Reflection.MethodInfo getDefaultMethod = s_getDefaultMethod.MakeGenericMethod(type); object defaultValue = getDefaultMethod.Invoke(null, new object[] { }); return defaultValue; } } internal static class Schema { public const string CodeGenerationSchemaNamespace = "http://schemas.microsoft.com/ado/2006/04/codegeneration"; } } namespace System.Data.EntityModel { /// /// Summary description for ClientApiGenerator. /// internal sealed class ClientApiGenerator { #region Instance Fields private CodeCompileUnit _compileUnit; private bool _isLanguageCaseSensitive = true; private EdmItemCollection _edmItemCollection; private FixUpCollection _fixUps; private AttributeEmitter _attributeEmitter; private EntityClassGenerator _generator; private List_errors; private TypeReference _typeReference = new TypeReference(); private string _sourceEdmNamespaceName; private string _defaultContainerNamespace; private string _namespacePrefix; private Dictionary _namespaceMap; #endregion #region Public Methods public ClientApiGenerator(object sourceSchema, EdmItemCollection edmItemCollection, EntityClassGenerator generator, List errors, string namespacePrefix) { Debug.Assert(edmItemCollection != null, "edmItemCollection is null"); Debug.Assert(generator != null, "generator is null"); Debug.Assert(errors != null, "errors is null"); _edmItemCollection = edmItemCollection; _generator = generator; _errors = errors; _attributeEmitter = new AttributeEmitter(_typeReference); _namespacePrefix = namespacePrefix; // generate map for inherited types and prefixed types _namespaceMap = new Dictionary (); } internal EdmItemCollection EdmItemCollection { get { return this._edmItemCollection; } } public string NamespacePrefix { get { return this._namespacePrefix; } } public Dictionary NamespaceMap { get { return this._namespaceMap; } } /// /// Parses a source Schema and outputs client-side generated code to /// the output TextWriter. /// /// The source Schema /// The TextWriter in which to write the output /// The Uri for the output. Can be null. ///A list of GeneratorErrors. internal void GenerateCode(LazyTextWriterCreator target) { Debug.Assert(target != null, "target parameter is null"); IndentedTextWriter indentedTextWriter = null; System.IO.Stream tempFileStream = null; System.IO.StreamReader reader = null; System.IO.StreamWriter writer = null; TempFileCollection tempFiles = null; try { CodeDomProvider provider = null; switch (Language) { case LanguageOption.GenerateCSharpCode: provider = new Microsoft.CSharp.CSharpCodeProvider(); break; case LanguageOption.GenerateVBCode: provider = new Microsoft.VisualBasic.VBCodeProvider(); break; } _isLanguageCaseSensitive = (provider.LanguageOptions & LanguageOptions.CaseInsensitive) == 0; new NamespaceEmitter(this, this.NamespacePrefix, target.TargetFilePath).Emit(); // if there were errors we don't need the output file if (RealErrorsExist) { return; } if (FixUps.Count == 0 || !FixUpCollection.IsLanguageSupported(Language)) { indentedTextWriter = new IndentedTextWriter(target.GetOrCreateTextWriter(), "\t"); } else { // need to write to a temporary file so we can do fixups... tempFiles = new TempFileCollection(Path.GetTempPath()); string filename = Path.Combine(tempFiles.TempDir, "EdmCodeGenFixup-" + Guid.NewGuid().ToString() + ".tmp"); tempFiles.AddFile(filename, false); tempFileStream = new System.IO.FileStream(filename, System.IO.FileMode.CreateNew, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None); indentedTextWriter = new IndentedTextWriter(new System.IO.StreamWriter(tempFileStream), "\t"); } CodeGeneratorOptions styleOptions = new CodeGeneratorOptions(); styleOptions.BracingStyle = "C"; styleOptions.BlankLinesBetweenMembers = false; styleOptions.VerbatimOrder = true; provider.GenerateCodeFromCompileUnit(CompileUnit, indentedTextWriter, styleOptions); // if we wrote to a temp file need to post process the file... if (tempFileStream != null) { indentedTextWriter.Flush(); tempFileStream.Seek(0, System.IO.SeekOrigin.Begin); reader = new System.IO.StreamReader(tempFileStream); FixUps.Do(reader, target.GetOrCreateTextWriter(), Language, !String.IsNullOrEmpty(SourceObjectNamespaceName)); } } catch (System.UnauthorizedAccessException ex) { AddError(ModelBuilderErrorCode.SecurityError, EdmSchemaErrorSeverity.Error, ex); } catch (System.IO.FileNotFoundException ex) { AddError(ModelBuilderErrorCode.FileNotFound, EdmSchemaErrorSeverity.Error, ex); } catch (System.Security.SecurityException ex) { AddError(ModelBuilderErrorCode.SecurityError, EdmSchemaErrorSeverity.Error, ex); } catch (System.IO.DirectoryNotFoundException ex) { AddError(ModelBuilderErrorCode.DirectoryNotFound, EdmSchemaErrorSeverity.Error, ex); } catch (System.IO.IOException ex) { AddError(ModelBuilderErrorCode.IOException, EdmSchemaErrorSeverity.Error, ex); } finally { if (indentedTextWriter != null) { indentedTextWriter.Close(); } if (tempFileStream != null) { tempFileStream.Close(); } if (tempFiles != null) { tempFiles.Delete(); ((IDisposable)tempFiles).Dispose(); } if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } } } ////// Verification code invoked for types /// /// The type being generated internal void VerifyLanguageCaseSensitiveCompatibilityForType(GlobalItem item) { if (_isLanguageCaseSensitive) { return; // no validation necessary } try { _edmItemCollection.GetItem( Identity(item), true // ignore case ); } catch (InvalidOperationException ex) { AddError(ModelBuilderErrorCode.IncompatibleSettingForCaseSensitiveOption, EdmSchemaErrorSeverity.Error, ex); } } /// /// Verification code invoked for properties /// /// The property or navigation property being generated internal void VerifyLanguageCaseSensitiveCompatibilityForProperty(EdmMember item) { if (_isLanguageCaseSensitive) { return; // no validation necessary } Debug.Assert(item != null); ReadOnlyMetadataCollectionmembers = item.DeclaringType.Members; HashSet set = new HashSet (StringComparer.OrdinalIgnoreCase); foreach (EdmMember member in members) { if (set.Contains(Identity(member)) && String.Equals(Identity(item), Identity(member), StringComparison.OrdinalIgnoreCase)) { AddError(ModelBuilderErrorCode.IncompatibleSettingForCaseSensitiveOption, EdmSchemaErrorSeverity.Error, new InvalidOperationException(Strings.PropertyExistsWithDifferentCase(Identity(item)))); } else { set.Add(Identity(member)); } } } /// /// Verification code invoked for entity sets /// /// The entity container being generated internal void VerifyLanguageCaseSensitiveCompatibilityForEntitySet(System.Data.Metadata.Edm.EntityContainer item) { if (_isLanguageCaseSensitive) { return; // no validation necessary } Debug.Assert(item != null); HashSetset = new HashSet (StringComparer.OrdinalIgnoreCase); foreach (EntitySetBase entitySetBase in item.BaseEntitySets) { if (Helper.IsEntitySet(entitySetBase)) { EntitySet entitySet = (EntitySet)entitySetBase; if (set.Contains(Identity(entitySet))) { AddError(ModelBuilderErrorCode.IncompatibleSettingForCaseSensitiveOption, EdmSchemaErrorSeverity.Error, new InvalidOperationException(Strings.EntitySetExistsWithDifferentCase(Identity(entitySet)))); } else { set.Add(Identity(entitySet)); } } } } #endregion #region Internal Properties internal LanguageOption Language { get { return _generator.LanguageOption; } } internal TypeReference TypeReference { get { return _typeReference; } } internal CodeCompileUnit CompileUnit { get { if (_compileUnit == null) _compileUnit = new CodeCompileUnit(); return _compileUnit; } } public void AddError(string message, ModelBuilderErrorCode errorCode, EdmSchemaErrorSeverity severity) { } public void AddError(ModelBuilderErrorCode errorCode, EdmSchemaErrorSeverity severity, Exception ex) { } internal void AddError(string message, ModelBuilderErrorCode errorCode, EdmSchemaErrorSeverity severity, Exception ex) { } /// /// Check collection for any real errors (Severity != Warning) /// public bool RealErrorsExist { get { foreach (EdmSchemaError error in _errors) { if (error.Severity != EdmSchemaErrorSeverity.Warning) return true; } return false; } } public IEnumerableGetSourceTypes() { foreach (EntityContainer container in _edmItemCollection.GetItems ()) { BuiltInTypeKind kind = container.BuiltInTypeKind; yield return container; } foreach (EdmType item in _edmItemCollection.GetItems ()) { switch (item.BuiltInTypeKind) { case BuiltInTypeKind.AssociationType: case BuiltInTypeKind.ComplexType: case BuiltInTypeKind.EntityType: yield return item; break; case BuiltInTypeKind.EdmFunction: case BuiltInTypeKind.PrimitiveType: break; default: Debug.Assert(false, item.BuiltInTypeKind.ToString()); break; } } } public string GetClientTypeNamespace(string serviceTypeNamespace) { if (string.IsNullOrEmpty(this.NamespacePrefix)) return serviceTypeNamespace; if (string.IsNullOrEmpty(serviceTypeNamespace) || ((this.DefaultContainerNamespace != null) && (this.DefaultContainerNamespace == serviceTypeNamespace))) { return this.NamespacePrefix; } else { return this.NamespacePrefix + "." + serviceTypeNamespace; } } public string GetContainerNamespace(EntityContainer container) { if (container == null) return null; string namespaceName = null; EntitySetBase baseEntitySet = container.BaseEntitySets.FirstOrDefault(); if (null != baseEntitySet) { namespaceName = baseEntitySet.ElementType.NamespaceName; } return namespaceName; } public CodeTypeReference GetLeastPossibleQualifiedTypeReference(EdmType type) { string typeRef; string clientNamespace = GetClientTypeNamespace(type.NamespaceName); if (clientNamespace == SourceEdmNamespaceName) { // we are already generating in this namespace, no need to qualify it typeRef = type.Name; } else { typeRef = GetObjectNamespace(clientNamespace) + "." + type.Name; } return TypeReference.FromString(typeRef); } public string SourceEdmNamespaceName { get { if (null != _sourceEdmNamespaceName) { return _sourceEdmNamespaceName; } // foreach (GlobalItem item in GetSourceTypes()) { EdmType edm = item as EdmType; if (null != edm) { return edm.NamespaceName; } } return null; } set { _sourceEdmNamespaceName = value; } } public string DefaultContainerNamespace { get { return _defaultContainerNamespace; } set { _defaultContainerNamespace = value; } } public string SourceObjectNamespaceName { get { string sourceEdmNamespaceName = SourceEdmNamespaceName; if (!String.IsNullOrEmpty(sourceEdmNamespaceName)) { return GetObjectNamespace(sourceEdmNamespaceName); } return null; } } private string GetObjectNamespace(string csdlNamespaceName) { Debug.Assert(csdlNamespaceName != null, "csdlNamespaceName is null"); string objectNamespace; if (_generator.EdmToObjectNamespaceMap.TryGetObjectNamespace(csdlNamespaceName, out objectNamespace)) { return objectNamespace; } return csdlNamespaceName; } /// /// /// ///internal FixUpCollection FixUps { get { if (_fixUps == null) _fixUps = new FixUpCollection(); return _fixUps; } } internal AttributeEmitter AttributeEmitter { get { return _attributeEmitter; } } internal bool IsLanguageCaseSensitive { get { return _isLanguageCaseSensitive; } } internal StringComparison LanguageAppropriateStringComparer { get { if (IsLanguageCaseSensitive) { return StringComparison.Ordinal; } else { return StringComparison.OrdinalIgnoreCase; } } } /// /// Helper method that raises the TypeGenerated event /// /// The event arguments passed to the subscriber internal void RaiseTypeGeneratedEvent(TypeGeneratedEventArgs eventArgs) { _generator.RaiseTypeGeneratedEvent(eventArgs); } ////// Helper method that raises the PropertyGenerated event /// /// The event arguments passed to the subscriber internal void RaisePropertyGeneratedEvent(PropertyGeneratedEventArgs eventArgs) { _generator.RaisePropertyGeneratedEvent(eventArgs); } #endregion private static string Identity(EdmMember member) { return member.ToString(); } private static string Identity(EntitySetBase entitySet) { return entitySet.ToString(); } private static string Identity(MetadataItem item) { return item.ToString(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.CodeDom; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.Data.Services.Design; using System.Data.EntityModel.Emitters; using System.Data.EntityModel.SchemaObjectModel; using SOM = System.Data.EntityModel.SchemaObjectModel; using System.Data.Metadata.Edm; using System.Diagnostics; using System.IO; using System.Linq; namespace System.Data.Metadata.Edm { internal static partial class Helper { internal static bool IsCollectionType(GlobalItem item) { return (BuiltInTypeKind.CollectionType == item.BuiltInTypeKind); } internal static bool IsComplexType(EdmType type) { return (BuiltInTypeKind.ComplexType == type.BuiltInTypeKind); } internal static bool IsEntitySet(EntitySetBase entitySetBase) { return BuiltInTypeKind.EntitySet == entitySetBase.BuiltInTypeKind; } internal static bool IsPrimitiveType(EdmType type) { return (BuiltInTypeKind.PrimitiveType == type.BuiltInTypeKind); } } internal static class TypeSemantics { internal static bool IsComplexType(TypeUsage type) { return Helper.IsComplexType(type.EdmType); } } internal static class EdmProviderManifest { // System Facet Info ////// Name of the MaxLength Facet /// internal const string MaxLengthFacetName = "MaxLength"; ////// Name of the Unicode Facet /// internal const string UnicodeFacetName = "Unicode"; ////// Name of the FixedLength Facet /// internal const string FixedLengthFacetName = "FixedLength"; ////// Name of the DateTimeKind Facet /// internal const string DateTimeKindFacetName = "DateTimeKind"; ////// Name of the PreserveSeconds Facet /// internal const string PreserveSecondsFacetName = "PreserveSeconds"; ////// Name of the Precision Facet /// internal const string PrecisionFacetName = "Precision"; ////// Name of the Scale Facet /// internal const string ScaleFacetName = "Scale"; ////// Name of the Nullable Facet /// internal const string NullableFacetName = "Nullable"; ////// Name of the DefaultValue Facet /// internal const string DefaultValueFacetName = "DefaultValue"; ////////// Name of the DefaultType metadata property ///// //internal const string DefaultTypeMetadataPropertyName = "DefaultType"; ////// Name of the Collation Facet /// internal const string CollationFacetName = "Collation"; } internal static class TypeSystem { private static readonly System.Reflection.MethodInfo s_getDefaultMethod = typeof(TypeSystem).GetMethod("GetDefault", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); private static T GetDefault() { return default(T); } internal static object GetDefaultValue(Type type) { // null is always the default for non value types and Nullable<> if (!type.IsValueType || (type.IsGenericType && typeof(Nullable<>) == type.GetGenericTypeDefinition())) { return null; } System.Reflection.MethodInfo getDefaultMethod = s_getDefaultMethod.MakeGenericMethod(type); object defaultValue = getDefaultMethod.Invoke(null, new object[] { }); return defaultValue; } } internal static class Schema { public const string CodeGenerationSchemaNamespace = "http://schemas.microsoft.com/ado/2006/04/codegeneration"; } } namespace System.Data.EntityModel { /// /// Summary description for ClientApiGenerator. /// internal sealed class ClientApiGenerator { #region Instance Fields private CodeCompileUnit _compileUnit; private bool _isLanguageCaseSensitive = true; private EdmItemCollection _edmItemCollection; private FixUpCollection _fixUps; private AttributeEmitter _attributeEmitter; private EntityClassGenerator _generator; private List_errors; private TypeReference _typeReference = new TypeReference(); private string _sourceEdmNamespaceName; private string _defaultContainerNamespace; private string _namespacePrefix; private Dictionary _namespaceMap; #endregion #region Public Methods public ClientApiGenerator(object sourceSchema, EdmItemCollection edmItemCollection, EntityClassGenerator generator, List errors, string namespacePrefix) { Debug.Assert(edmItemCollection != null, "edmItemCollection is null"); Debug.Assert(generator != null, "generator is null"); Debug.Assert(errors != null, "errors is null"); _edmItemCollection = edmItemCollection; _generator = generator; _errors = errors; _attributeEmitter = new AttributeEmitter(_typeReference); _namespacePrefix = namespacePrefix; // generate map for inherited types and prefixed types _namespaceMap = new Dictionary (); } internal EdmItemCollection EdmItemCollection { get { return this._edmItemCollection; } } public string NamespacePrefix { get { return this._namespacePrefix; } } public Dictionary NamespaceMap { get { return this._namespaceMap; } } /// /// Parses a source Schema and outputs client-side generated code to /// the output TextWriter. /// /// The source Schema /// The TextWriter in which to write the output /// The Uri for the output. Can be null. ///A list of GeneratorErrors. internal void GenerateCode(LazyTextWriterCreator target) { Debug.Assert(target != null, "target parameter is null"); IndentedTextWriter indentedTextWriter = null; System.IO.Stream tempFileStream = null; System.IO.StreamReader reader = null; System.IO.StreamWriter writer = null; TempFileCollection tempFiles = null; try { CodeDomProvider provider = null; switch (Language) { case LanguageOption.GenerateCSharpCode: provider = new Microsoft.CSharp.CSharpCodeProvider(); break; case LanguageOption.GenerateVBCode: provider = new Microsoft.VisualBasic.VBCodeProvider(); break; } _isLanguageCaseSensitive = (provider.LanguageOptions & LanguageOptions.CaseInsensitive) == 0; new NamespaceEmitter(this, this.NamespacePrefix, target.TargetFilePath).Emit(); // if there were errors we don't need the output file if (RealErrorsExist) { return; } if (FixUps.Count == 0 || !FixUpCollection.IsLanguageSupported(Language)) { indentedTextWriter = new IndentedTextWriter(target.GetOrCreateTextWriter(), "\t"); } else { // need to write to a temporary file so we can do fixups... tempFiles = new TempFileCollection(Path.GetTempPath()); string filename = Path.Combine(tempFiles.TempDir, "EdmCodeGenFixup-" + Guid.NewGuid().ToString() + ".tmp"); tempFiles.AddFile(filename, false); tempFileStream = new System.IO.FileStream(filename, System.IO.FileMode.CreateNew, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None); indentedTextWriter = new IndentedTextWriter(new System.IO.StreamWriter(tempFileStream), "\t"); } CodeGeneratorOptions styleOptions = new CodeGeneratorOptions(); styleOptions.BracingStyle = "C"; styleOptions.BlankLinesBetweenMembers = false; styleOptions.VerbatimOrder = true; provider.GenerateCodeFromCompileUnit(CompileUnit, indentedTextWriter, styleOptions); // if we wrote to a temp file need to post process the file... if (tempFileStream != null) { indentedTextWriter.Flush(); tempFileStream.Seek(0, System.IO.SeekOrigin.Begin); reader = new System.IO.StreamReader(tempFileStream); FixUps.Do(reader, target.GetOrCreateTextWriter(), Language, !String.IsNullOrEmpty(SourceObjectNamespaceName)); } } catch (System.UnauthorizedAccessException ex) { AddError(ModelBuilderErrorCode.SecurityError, EdmSchemaErrorSeverity.Error, ex); } catch (System.IO.FileNotFoundException ex) { AddError(ModelBuilderErrorCode.FileNotFound, EdmSchemaErrorSeverity.Error, ex); } catch (System.Security.SecurityException ex) { AddError(ModelBuilderErrorCode.SecurityError, EdmSchemaErrorSeverity.Error, ex); } catch (System.IO.DirectoryNotFoundException ex) { AddError(ModelBuilderErrorCode.DirectoryNotFound, EdmSchemaErrorSeverity.Error, ex); } catch (System.IO.IOException ex) { AddError(ModelBuilderErrorCode.IOException, EdmSchemaErrorSeverity.Error, ex); } finally { if (indentedTextWriter != null) { indentedTextWriter.Close(); } if (tempFileStream != null) { tempFileStream.Close(); } if (tempFiles != null) { tempFiles.Delete(); ((IDisposable)tempFiles).Dispose(); } if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } } } ////// Verification code invoked for types /// /// The type being generated internal void VerifyLanguageCaseSensitiveCompatibilityForType(GlobalItem item) { if (_isLanguageCaseSensitive) { return; // no validation necessary } try { _edmItemCollection.GetItem( Identity(item), true // ignore case ); } catch (InvalidOperationException ex) { AddError(ModelBuilderErrorCode.IncompatibleSettingForCaseSensitiveOption, EdmSchemaErrorSeverity.Error, ex); } } /// /// Verification code invoked for properties /// /// The property or navigation property being generated internal void VerifyLanguageCaseSensitiveCompatibilityForProperty(EdmMember item) { if (_isLanguageCaseSensitive) { return; // no validation necessary } Debug.Assert(item != null); ReadOnlyMetadataCollectionmembers = item.DeclaringType.Members; HashSet set = new HashSet (StringComparer.OrdinalIgnoreCase); foreach (EdmMember member in members) { if (set.Contains(Identity(member)) && String.Equals(Identity(item), Identity(member), StringComparison.OrdinalIgnoreCase)) { AddError(ModelBuilderErrorCode.IncompatibleSettingForCaseSensitiveOption, EdmSchemaErrorSeverity.Error, new InvalidOperationException(Strings.PropertyExistsWithDifferentCase(Identity(item)))); } else { set.Add(Identity(member)); } } } /// /// Verification code invoked for entity sets /// /// The entity container being generated internal void VerifyLanguageCaseSensitiveCompatibilityForEntitySet(System.Data.Metadata.Edm.EntityContainer item) { if (_isLanguageCaseSensitive) { return; // no validation necessary } Debug.Assert(item != null); HashSetset = new HashSet (StringComparer.OrdinalIgnoreCase); foreach (EntitySetBase entitySetBase in item.BaseEntitySets) { if (Helper.IsEntitySet(entitySetBase)) { EntitySet entitySet = (EntitySet)entitySetBase; if (set.Contains(Identity(entitySet))) { AddError(ModelBuilderErrorCode.IncompatibleSettingForCaseSensitiveOption, EdmSchemaErrorSeverity.Error, new InvalidOperationException(Strings.EntitySetExistsWithDifferentCase(Identity(entitySet)))); } else { set.Add(Identity(entitySet)); } } } } #endregion #region Internal Properties internal LanguageOption Language { get { return _generator.LanguageOption; } } internal TypeReference TypeReference { get { return _typeReference; } } internal CodeCompileUnit CompileUnit { get { if (_compileUnit == null) _compileUnit = new CodeCompileUnit(); return _compileUnit; } } public void AddError(string message, ModelBuilderErrorCode errorCode, EdmSchemaErrorSeverity severity) { } public void AddError(ModelBuilderErrorCode errorCode, EdmSchemaErrorSeverity severity, Exception ex) { } internal void AddError(string message, ModelBuilderErrorCode errorCode, EdmSchemaErrorSeverity severity, Exception ex) { } /// /// Check collection for any real errors (Severity != Warning) /// public bool RealErrorsExist { get { foreach (EdmSchemaError error in _errors) { if (error.Severity != EdmSchemaErrorSeverity.Warning) return true; } return false; } } public IEnumerableGetSourceTypes() { foreach (EntityContainer container in _edmItemCollection.GetItems ()) { BuiltInTypeKind kind = container.BuiltInTypeKind; yield return container; } foreach (EdmType item in _edmItemCollection.GetItems ()) { switch (item.BuiltInTypeKind) { case BuiltInTypeKind.AssociationType: case BuiltInTypeKind.ComplexType: case BuiltInTypeKind.EntityType: yield return item; break; case BuiltInTypeKind.EdmFunction: case BuiltInTypeKind.PrimitiveType: break; default: Debug.Assert(false, item.BuiltInTypeKind.ToString()); break; } } } public string GetClientTypeNamespace(string serviceTypeNamespace) { if (string.IsNullOrEmpty(this.NamespacePrefix)) return serviceTypeNamespace; if (string.IsNullOrEmpty(serviceTypeNamespace) || ((this.DefaultContainerNamespace != null) && (this.DefaultContainerNamespace == serviceTypeNamespace))) { return this.NamespacePrefix; } else { return this.NamespacePrefix + "." + serviceTypeNamespace; } } public string GetContainerNamespace(EntityContainer container) { if (container == null) return null; string namespaceName = null; EntitySetBase baseEntitySet = container.BaseEntitySets.FirstOrDefault(); if (null != baseEntitySet) { namespaceName = baseEntitySet.ElementType.NamespaceName; } return namespaceName; } public CodeTypeReference GetLeastPossibleQualifiedTypeReference(EdmType type) { string typeRef; string clientNamespace = GetClientTypeNamespace(type.NamespaceName); if (clientNamespace == SourceEdmNamespaceName) { // we are already generating in this namespace, no need to qualify it typeRef = type.Name; } else { typeRef = GetObjectNamespace(clientNamespace) + "." + type.Name; } return TypeReference.FromString(typeRef); } public string SourceEdmNamespaceName { get { if (null != _sourceEdmNamespaceName) { return _sourceEdmNamespaceName; } // foreach (GlobalItem item in GetSourceTypes()) { EdmType edm = item as EdmType; if (null != edm) { return edm.NamespaceName; } } return null; } set { _sourceEdmNamespaceName = value; } } public string DefaultContainerNamespace { get { return _defaultContainerNamespace; } set { _defaultContainerNamespace = value; } } public string SourceObjectNamespaceName { get { string sourceEdmNamespaceName = SourceEdmNamespaceName; if (!String.IsNullOrEmpty(sourceEdmNamespaceName)) { return GetObjectNamespace(sourceEdmNamespaceName); } return null; } } private string GetObjectNamespace(string csdlNamespaceName) { Debug.Assert(csdlNamespaceName != null, "csdlNamespaceName is null"); string objectNamespace; if (_generator.EdmToObjectNamespaceMap.TryGetObjectNamespace(csdlNamespaceName, out objectNamespace)) { return objectNamespace; } return csdlNamespaceName; } /// /// /// ///internal FixUpCollection FixUps { get { if (_fixUps == null) _fixUps = new FixUpCollection(); return _fixUps; } } internal AttributeEmitter AttributeEmitter { get { return _attributeEmitter; } } internal bool IsLanguageCaseSensitive { get { return _isLanguageCaseSensitive; } } internal StringComparison LanguageAppropriateStringComparer { get { if (IsLanguageCaseSensitive) { return StringComparison.Ordinal; } else { return StringComparison.OrdinalIgnoreCase; } } } /// /// Helper method that raises the TypeGenerated event /// /// The event arguments passed to the subscriber internal void RaiseTypeGeneratedEvent(TypeGeneratedEventArgs eventArgs) { _generator.RaiseTypeGeneratedEvent(eventArgs); } ////// Helper method that raises the PropertyGenerated event /// /// The event arguments passed to the subscriber internal void RaisePropertyGeneratedEvent(PropertyGeneratedEventArgs eventArgs) { _generator.RaisePropertyGeneratedEvent(eventArgs); } #endregion private static string Identity(EdmMember member) { return member.ToString(); } private static string Identity(EntitySetBase entitySet) { return entitySet.ToString(); } private static string Identity(MetadataItem item) { return item.ToString(); } } } // 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
- MailFileEditor.cs
- CommandEventArgs.cs
- Parameter.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- MonitorWrapper.cs
- SubclassTypeValidator.cs
- ScanQueryOperator.cs
- Button.cs
- PackWebRequest.cs
- DependencySource.cs
- FontSizeConverter.cs
- ProfileModule.cs
- TraceHwndHost.cs
- WebBrowserNavigatedEventHandler.cs
- IfElseDesigner.xaml.cs
- DayRenderEvent.cs
- EntityContainerRelationshipSet.cs
- CmsInterop.cs
- PriorityRange.cs
- XmlDataDocument.cs
- WorkflowExecutor.cs
- COAUTHINFO.cs
- ResumeStoryboard.cs
- DataError.cs
- HtmlUtf8RawTextWriter.cs
- ConfigurationSectionCollection.cs
- ApplicationTrust.cs
- activationcontext.cs
- LocalizationParserHooks.cs
- MediaCommands.cs
- TriggerCollection.cs
- RunClient.cs
- Context.cs
- ApplicationDirectory.cs
- Visitor.cs
- MappingItemCollection.cs
- GraphicsContainer.cs
- MailWebEventProvider.cs
- BufferedReadStream.cs
- GetReadStreamResult.cs
- EndpointBehaviorElementCollection.cs
- PingReply.cs
- MatrixAnimationUsingPath.cs
- BinaryReader.cs
- HttpBrowserCapabilitiesWrapper.cs
- ExpressionBuilderContext.cs
- ModuleBuilder.cs
- DetailsViewRow.cs
- SafeRightsManagementSessionHandle.cs
- SqlUtils.cs
- MailDefinitionBodyFileNameEditor.cs
- WebControl.cs
- SingleAnimationBase.cs
- DrawingServices.cs
- XmlSchemaAnnotated.cs
- CatalogPart.cs
- ImplicitInputBrush.cs
- ContentControl.cs
- SystemIPAddressInformation.cs
- LayoutEditorPart.cs
- DecoderReplacementFallback.cs
- Publisher.cs
- PenThreadPool.cs
- TransformedBitmap.cs
- RegexCompiler.cs
- FileLogRecordHeader.cs
- DocumentScope.cs
- VScrollBar.cs
- CompilerLocalReference.cs
- DataColumnChangeEvent.cs
- StylusPointPropertyUnit.cs
- ContainerControl.cs
- WindowsPen.cs
- SecurityRuntime.cs
- PublisherMembershipCondition.cs
- listitem.cs
- XmlDocumentSchema.cs
- WindowsPen.cs
- StrongNameIdentityPermission.cs
- DelayedRegex.cs
- AssemblyBuilder.cs
- FrameworkContentElement.cs
- WpfPayload.cs
- TreeViewImageIndexConverter.cs
- ReadOnlyCollectionBase.cs
- SymmetricKey.cs
- DuplexChannel.cs
- XamlToRtfParser.cs
- Panel.cs
- Buffer.cs
- ScrollBarRenderer.cs
- WrapperSecurityCommunicationObject.cs
- xmlglyphRunInfo.cs
- ConfigurationSchemaErrors.cs
- ClientRoleProvider.cs
- TargetControlTypeAttribute.cs
- RuntimeArgumentHandle.cs
- OleServicesContext.cs
- NetworkInformationPermission.cs
- Root.cs