Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Common / InheritanceRules.cs / 1305376 / 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
- LinearKeyFrames.cs
- DocumentPageViewAutomationPeer.cs
- ToolStripManager.cs
- InputLanguageEventArgs.cs
- ValidationManager.cs
- MasterPageParser.cs
- xml.cs
- IdentifierService.cs
- SetUserPreferenceRequest.cs
- NativeActivityTransactionContext.cs
- AliasGenerator.cs
- WSSecurityTokenSerializer.cs
- RegistryKey.cs
- COM2TypeInfoProcessor.cs
- PersonalizableTypeEntry.cs
- DataGridViewEditingControlShowingEventArgs.cs
- TcpSocketManager.cs
- SmiEventSink_DeferedProcessing.cs
- PhoneCallDesigner.cs
- log.cs
- Point.cs
- DataListItemEventArgs.cs
- BinaryFormatter.cs
- isolationinterop.cs
- CallSiteBinder.cs
- HwndKeyboardInputProvider.cs
- PropertyNames.cs
- CommonXSendMessage.cs
- WorkflowEnvironment.cs
- ExternalDataExchangeService.cs
- TableLayoutRowStyleCollection.cs
- ReferentialConstraint.cs
- SerialStream.cs
- BinaryExpression.cs
- ValidatedControlConverter.cs
- ProtectedConfigurationProviderCollection.cs
- TextBox.cs
- SystemException.cs
- _NetworkingPerfCounters.cs
- ProfileManager.cs
- FixedTextSelectionProcessor.cs
- SourceFileBuildProvider.cs
- ConfigurationSectionGroupCollection.cs
- EdmToObjectNamespaceMap.cs
- TextElementAutomationPeer.cs
- MailWebEventProvider.cs
- Qualifier.cs
- WebColorConverter.cs
- ServicePointManagerElement.cs
- XdrBuilder.cs
- KeyValueSerializer.cs
- AttachedProperty.cs
- FunctionNode.cs
- PagesSection.cs
- TextElementCollectionHelper.cs
- RegistryKey.cs
- HeaderedContentControl.cs
- DataErrorValidationRule.cs
- ErrorWrapper.cs
- MemberJoinTreeNode.cs
- Select.cs
- RequiredFieldValidator.cs
- XamlWrappingReader.cs
- ComponentDesigner.cs
- WorkflowRuntimeService.cs
- Material.cs
- ToolStripOverflow.cs
- ListBase.cs
- Pointer.cs
- DbParameterCollection.cs
- XPathDocumentNavigator.cs
- GridViewPageEventArgs.cs
- TreeNodeEventArgs.cs
- SoapRpcServiceAttribute.cs
- MessagePropertyDescription.cs
- StringStorage.cs
- ListItemsPage.cs
- WebPartCloseVerb.cs
- TypeHelpers.cs
- TextDecorationLocationValidation.cs
- SamlEvidence.cs
- ToolStripRenderer.cs
- SQLUtility.cs
- Trace.cs
- TableDetailsRow.cs
- InsufficientMemoryException.cs
- StringFunctions.cs
- ModuleConfigurationInfo.cs
- ExpressionNormalizer.cs
- ItemChangedEventArgs.cs
- SqlErrorCollection.cs
- JpegBitmapDecoder.cs
- XPathNodeInfoAtom.cs
- panel.cs
- COM2PictureConverter.cs
- PagerStyle.cs
- DataStorage.cs
- TemplateComponentConnector.cs
- EventEntry.cs
- JournalEntryStack.cs