Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- EmptyEnumerable.cs
- GenericArgumentsUpdater.cs
- DisplayClaim.cs
- RootAction.cs
- SimpleRecyclingCache.cs
- Verify.cs
- XPathSelectionIterator.cs
- uribuilder.cs
- UserControl.cs
- InfiniteIntConverter.cs
- Parallel.cs
- PeerPresenceInfo.cs
- ProfileProvider.cs
- UdpMessageProperty.cs
- BufferedGraphics.cs
- ExpressionNormalizer.cs
- DefaultWorkflowSchedulerService.cs
- Context.cs
- EntryIndex.cs
- DataListItem.cs
- XhtmlBasicCalendarAdapter.cs
- StringOutput.cs
- EncoderNLS.cs
- PageCodeDomTreeGenerator.cs
- UserValidatedEventArgs.cs
- ValueType.cs
- StringDictionaryEditor.cs
- PriorityRange.cs
- LambdaCompiler.Address.cs
- MergeLocalizationDirectives.cs
- ActivityValidationServices.cs
- DataGridPageChangedEventArgs.cs
- Emitter.cs
- TrustLevel.cs
- VirtualDirectoryMappingCollection.cs
- XmlSchemaObjectTable.cs
- DesignerActionService.cs
- CommandCollectionEditor.cs
- ResourceReferenceKeyNotFoundException.cs
- DateTimeOffset.cs
- MetadataPropertyvalue.cs
- ValueTypeFixupInfo.cs
- ObjectDataSourceMethodEventArgs.cs
- XmlNodeChangedEventArgs.cs
- PointLight.cs
- DuplexClientBase.cs
- UpdatePanel.cs
- ContentType.cs
- FormatterConverter.cs
- AutoGeneratedField.cs
- ColorTransformHelper.cs
- XmlChildEnumerator.cs
- FileDialog_Vista_Interop.cs
- SafeLibraryHandle.cs
- ThreadStartException.cs
- DataGridRow.cs
- CellIdBoolean.cs
- DelayedRegex.cs
- ViewGenerator.cs
- CmsUtils.cs
- StoreContentChangedEventArgs.cs
- WindowsRegion.cs
- XmlDocumentSerializer.cs
- Matrix3DStack.cs
- ApplicationInterop.cs
- WebPartMenuStyle.cs
- StringFormat.cs
- WebHttpSecurityModeHelper.cs
- CDSsyncETWBCLProvider.cs
- IdentitySection.cs
- CompiledXpathExpr.cs
- Utils.cs
- Timer.cs
- _CacheStreams.cs
- GPPOINT.cs
- WsatConfiguration.cs
- SqlMetaData.cs
- NegationPusher.cs
- Viewport2DVisual3D.cs
- PostBackOptions.cs
- ToolStripMenuItemDesigner.cs
- SamlNameIdentifierClaimResource.cs
- DesignerCommandSet.cs
- HtmlLink.cs
- PageTheme.cs
- ValueProviderWrapper.cs
- WebBrowserNavigatingEventHandler.cs
- BinaryUtilClasses.cs
- ObjectDataSourceWizardForm.cs
- ImpersonationOption.cs
- GridProviderWrapper.cs
- ContextMenu.cs
- Baml2006Reader.cs
- ExecutionEngineException.cs
- RuntimeHandles.cs
- translator.cs
- FontFamily.cs
- CustomAttributeFormatException.cs
- ControlCollection.cs
- SearchExpression.cs