Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DLinq / Dlinq / SqlClient / Common / InheritanceRules.cs / 2 / InheritanceRules.cs
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Linq; using System.Data.Linq.Mapping; using System.Data.Linq.Provider; namespace System.Data.Linq.SqlClient { ////// This class defines the rules for inheritance behaviors. The rules: /// /// (1) The same field may not be mapped to different database columns. /// The DistinguishedMemberName and AreSameMember methods describe what 'same' means between two MemberInfos. /// (2) Discriminators held in fixed-length fields in the database don't need /// to be manually padded in inheritance mapping [InheritanceMapping(Code='x')]. /// /// static class InheritanceRules { ////// Creates a name that is the same when the member should be considered 'same' /// for the purposes of the inheritance feature. /// internal static object DistinguishedMemberName(MemberInfo mi) { PropertyInfo pi = mi as PropertyInfo; FieldInfo fi = mi as FieldInfo; if (fi != null) { // Human readable variant: // return "fi:" + mi.Name + ":" + mi.DeclaringType; return new MetaPosition(mi); } else if (pi != null) { MethodInfo meth = null; if (pi.CanRead) { meth = pi.GetGetMethod(); } if (meth == null && pi.CanWrite) { meth = pi.GetSetMethod(); } bool isVirtual = meth != null && meth.IsVirtual; // Human readable variant: // return "pi:" + mi.Name + ":" + (isVirtual ? "virtual" : mi.DeclaringType.ToString()); if (isVirtual) { return mi.Name; } else { return new MetaPosition(mi); } } else { throw Error.ArgumentOutOfRange("mi"); } } ////// Compares two MemberInfos for 'same-ness'. /// internal static bool AreSameMember(MemberInfo mi1, MemberInfo mi2) { return DistinguishedMemberName(mi1).Equals(DistinguishedMemberName(mi2)); } ////// The representation of a inheritance code when mapped to a specific provider type. /// internal static object InheritanceCodeForClientCompare(object rawCode, System.Data.Linq.SqlClient.ProviderType providerType) { // If its a fixed-size string type in the store then pad it with spaces so that // comparing the string on the client agrees with the value returnd on the store. if (providerType.IsFixedSize && rawCode.GetType()==typeof(string)) { string s = (string) rawCode; if (providerType.Size.HasValue && s.Length!=providerType.Size) { s = s.PadRight(providerType.Size.Value).Substring(0,providerType.Size.Value); } return s; } return rawCode; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Linq; using System.Data.Linq.Mapping; using System.Data.Linq.Provider; namespace System.Data.Linq.SqlClient { ////// This class defines the rules for inheritance behaviors. The rules: /// /// (1) The same field may not be mapped to different database columns. /// The DistinguishedMemberName and AreSameMember methods describe what 'same' means between two MemberInfos. /// (2) Discriminators held in fixed-length fields in the database don't need /// to be manually padded in inheritance mapping [InheritanceMapping(Code='x')]. /// /// static class InheritanceRules { ////// Creates a name that is the same when the member should be considered 'same' /// for the purposes of the inheritance feature. /// internal static object DistinguishedMemberName(MemberInfo mi) { PropertyInfo pi = mi as PropertyInfo; FieldInfo fi = mi as FieldInfo; if (fi != null) { // Human readable variant: // return "fi:" + mi.Name + ":" + mi.DeclaringType; return new MetaPosition(mi); } else if (pi != null) { MethodInfo meth = null; if (pi.CanRead) { meth = pi.GetGetMethod(); } if (meth == null && pi.CanWrite) { meth = pi.GetSetMethod(); } bool isVirtual = meth != null && meth.IsVirtual; // Human readable variant: // return "pi:" + mi.Name + ":" + (isVirtual ? "virtual" : mi.DeclaringType.ToString()); if (isVirtual) { return mi.Name; } else { return new MetaPosition(mi); } } else { throw Error.ArgumentOutOfRange("mi"); } } ////// Compares two MemberInfos for 'same-ness'. /// internal static bool AreSameMember(MemberInfo mi1, MemberInfo mi2) { return DistinguishedMemberName(mi1).Equals(DistinguishedMemberName(mi2)); } ////// The representation of a inheritance code when mapped to a specific provider type. /// internal static object InheritanceCodeForClientCompare(object rawCode, System.Data.Linq.SqlClient.ProviderType providerType) { // If its a fixed-size string type in the store then pad it with spaces so that // comparing the string on the client agrees with the value returnd on the store. if (providerType.IsFixedSize && rawCode.GetType()==typeof(string)) { string s = (string) rawCode; if (providerType.Size.HasValue && s.Length!=providerType.Size) { s = s.PadRight(providerType.Size.Value).Substring(0,providerType.Size.Value); } return s; } return rawCode; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- VisualStyleRenderer.cs
- RegexRunnerFactory.cs
- InputProcessorProfilesLoader.cs
- WebPartCloseVerb.cs
- MenuAutomationPeer.cs
- InputReportEventArgs.cs
- DefaultPropertyAttribute.cs
- EntityDataSourceViewSchema.cs
- SqlServer2KCompatibilityAnnotation.cs
- XmlSchemaElement.cs
- WebUtil.cs
- CapabilitiesState.cs
- Listbox.cs
- SchemaMapping.cs
- ActiveDocumentEvent.cs
- BindableTemplateBuilder.cs
- CryptoConfig.cs
- ClientConfigurationSystem.cs
- DetailsViewRow.cs
- InputScopeNameConverter.cs
- PropertyDescriptorCollection.cs
- AdditionalEntityFunctions.cs
- VirtualPathProvider.cs
- X509ThumbprintKeyIdentifierClause.cs
- DataServiceProcessingPipeline.cs
- FixedTextBuilder.cs
- BitmapEffect.cs
- XDRSchema.cs
- ClientSideProviderDescription.cs
- SingleAnimation.cs
- BitmapFrameDecode.cs
- WebConfigurationManager.cs
- ConnectionManagementSection.cs
- EdmItemError.cs
- StringFormat.cs
- HttpModulesSection.cs
- XmlUnspecifiedAttribute.cs
- PropertyFilterAttribute.cs
- FontInfo.cs
- PropertyGridDesigner.cs
- QueryPageSettingsEventArgs.cs
- BaseCAMarshaler.cs
- AccessedThroughPropertyAttribute.cs
- Compiler.cs
- ExpandableObjectConverter.cs
- LinqDataSourceView.cs
- QueueProcessor.cs
- ImmutableCollection.cs
- BeginEvent.cs
- ManagementInstaller.cs
- XamlParser.cs
- QueueProcessor.cs
- DebuggerAttributes.cs
- ConditionedDesigner.cs
- ProviderBase.cs
- DurationConverter.cs
- ResourceProperty.cs
- FontSource.cs
- InvokePattern.cs
- DoubleAnimation.cs
- DiscoveryDocumentSerializer.cs
- TypefaceMetricsCache.cs
- Animatable.cs
- AnonymousIdentificationSection.cs
- Visitor.cs
- WebPartAddingEventArgs.cs
- DisplayInformation.cs
- ConsoleCancelEventArgs.cs
- WebPartConnectionsConfigureVerb.cs
- DesignTimeSiteMapProvider.cs
- SafeHandles.cs
- SoapHeaderException.cs
- Privilege.cs
- Popup.cs
- CookieProtection.cs
- EventMap.cs
- WebPartAddingEventArgs.cs
- PropertyGrid.cs
- ToolStripItemClickedEventArgs.cs
- ToggleProviderWrapper.cs
- ConfigUtil.cs
- Int16KeyFrameCollection.cs
- CodeTypeParameter.cs
- SchemaMerger.cs
- ValidationEventArgs.cs
- XmlDomTextWriter.cs
- SingleSelectRootGridEntry.cs
- FrameworkContextData.cs
- UnauthorizedAccessException.cs
- DataGridViewHitTestInfo.cs
- ResourceBinder.cs
- XPathAncestorIterator.cs
- Int32CollectionValueSerializer.cs
- LocalizationParserHooks.cs
- AdornerDecorator.cs
- StringKeyFrameCollection.cs
- InstanceKeyNotReadyException.cs
- PageThemeCodeDomTreeGenerator.cs
- DataSourceHelper.cs
- ConfigurationManagerHelperFactory.cs