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
- PromptStyle.cs
- SqlErrorCollection.cs
- ISCIIEncoding.cs
- ListCollectionView.cs
- MarkupCompilePass2.cs
- PnrpPeerResolverElement.cs
- DoubleAnimationUsingPath.cs
- HyperLinkColumn.cs
- CodeExpressionCollection.cs
- Win32Native.cs
- PointAnimationUsingKeyFrames.cs
- SqlCommand.cs
- RectangleGeometry.cs
- EncoderParameters.cs
- WeakReferenceList.cs
- TTSVoice.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- HostingEnvironment.cs
- ImpersonationContext.cs
- TableLayoutCellPaintEventArgs.cs
- FileNotFoundException.cs
- DynamicValidatorEventArgs.cs
- XmlTextReaderImplHelpers.cs
- DataPagerFieldItem.cs
- TabRenderer.cs
- _BasicClient.cs
- ListCollectionView.cs
- SubpageParagraph.cs
- Win32MouseDevice.cs
- TableLayoutStyleCollection.cs
- IpcClientManager.cs
- FrameworkElement.cs
- AttributeCollection.cs
- ILGenerator.cs
- ContentElement.cs
- DataTableCollection.cs
- UInt64.cs
- BitmapEncoder.cs
- DataBoundControlParameterTarget.cs
- CorrelationManager.cs
- ToolStripLabel.cs
- SqlPersistenceProviderFactory.cs
- Label.cs
- DataObjectPastingEventArgs.cs
- DotNetATv1WindowsLogEntryDeserializer.cs
- BaseAddressPrefixFilterElementCollection.cs
- TypefaceMetricsCache.cs
- Semaphore.cs
- PrinterResolution.cs
- BinaryExpressionHelper.cs
- DependencyObject.cs
- PageAdapter.cs
- Rule.cs
- ManifestResourceInfo.cs
- VirtualizedItemPattern.cs
- EnumValAlphaComparer.cs
- SchemaType.cs
- LoadedOrUnloadedOperation.cs
- GraphicsPathIterator.cs
- SrgsDocumentParser.cs
- ZipIORawDataFileBlock.cs
- HttpCapabilitiesBase.cs
- FontConverter.cs
- FlowLayoutPanel.cs
- MinimizableAttributeTypeConverter.cs
- OrderByQueryOptionExpression.cs
- ModelItem.cs
- QuaternionAnimation.cs
- Opcode.cs
- DesignerDataSourceView.cs
- ElementNotAvailableException.cs
- EncodedStreamFactory.cs
- PenCursorManager.cs
- SymDocumentType.cs
- DoubleLinkListEnumerator.cs
- XsdDuration.cs
- DefaultMemberAttribute.cs
- PageThemeBuildProvider.cs
- TouchEventArgs.cs
- OledbConnectionStringbuilder.cs
- SchemaNotation.cs
- TdsParserStateObject.cs
- Fonts.cs
- SmiConnection.cs
- configsystem.cs
- SessionStateItemCollection.cs
- TextBox.cs
- IfAction.cs
- AutomationElementIdentifiers.cs
- UserNameSecurityTokenAuthenticator.cs
- AuthorizationRuleCollection.cs
- ActivityCodeGenerator.cs
- XsltFunctions.cs
- ColumnCollection.cs
- SettingsPropertyIsReadOnlyException.cs
- HiddenFieldPageStatePersister.cs
- ReadOnlyTernaryTree.cs
- SqlEnums.cs
- SerialPort.cs
- SpeechEvent.cs