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
- DataList.cs
- AncestorChangedEventArgs.cs
- SqlTypeSystemProvider.cs
- WebEvents.cs
- WebPartDisplayModeEventArgs.cs
- CodeAttributeDeclarationCollection.cs
- TableProviderWrapper.cs
- FontFamilyValueSerializer.cs
- DesigntimeLicenseContext.cs
- StringStorage.cs
- DataException.cs
- Int64AnimationBase.cs
- StoreAnnotationsMap.cs
- Pointer.cs
- FieldValue.cs
- PackWebRequestFactory.cs
- PeerObject.cs
- RichTextBox.cs
- GridLength.cs
- ConfigurationManagerHelper.cs
- MobileCategoryAttribute.cs
- UIElementHelper.cs
- DBSchemaRow.cs
- Root.cs
- Canvas.cs
- AssertSection.cs
- GPStream.cs
- Config.cs
- ToolStripStatusLabel.cs
- OleDbReferenceCollection.cs
- PropertyKey.cs
- ScrollEvent.cs
- HttpModulesSection.cs
- HostSecurityManager.cs
- CompositeCollectionView.cs
- DataSourceProvider.cs
- SafeRightsManagementHandle.cs
- FilteredXmlReader.cs
- ProjectionAnalyzer.cs
- Rectangle.cs
- TextParaLineResult.cs
- BrowserCapabilitiesCompiler.cs
- ObjectStateManagerMetadata.cs
- DataGridViewSelectedColumnCollection.cs
- CustomWebEventKey.cs
- RoleServiceManager.cs
- FixedSOMFixedBlock.cs
- WebExceptionStatus.cs
- AttachedPropertiesService.cs
- _NestedSingleAsyncResult.cs
- ProcessingInstructionAction.cs
- SystemBrushes.cs
- PolicyException.cs
- AsymmetricKeyExchangeFormatter.cs
- SHA512.cs
- ButtonFlatAdapter.cs
- MailBnfHelper.cs
- CroppedBitmap.cs
- CodeCommentStatement.cs
- FontResourceCache.cs
- CodeGotoStatement.cs
- ToolboxItemCollection.cs
- FillBehavior.cs
- GrammarBuilderWildcard.cs
- BaseCollection.cs
- UIElementParaClient.cs
- TreeWalker.cs
- ResourceManager.cs
- OdbcEnvironment.cs
- ScopedKnownTypes.cs
- GetPolicyDetailsRequest.cs
- TargetConverter.cs
- UnaryNode.cs
- ErrorWebPart.cs
- CodeLabeledStatement.cs
- Size3D.cs
- GridViewRow.cs
- BufferAllocator.cs
- ParentUndoUnit.cs
- FamilyMapCollection.cs
- StickyNoteHelper.cs
- SingleStorage.cs
- GeneralTransform3D.cs
- VisualTarget.cs
- NegotiateStream.cs
- ParameterModifier.cs
- DrawingGroupDrawingContext.cs
- WindowsScrollBar.cs
- AliasedSlot.cs
- TableCell.cs
- CodeCatchClause.cs
- TouchEventArgs.cs
- WebBrowserNavigatingEventHandler.cs
- AgileSafeNativeMemoryHandle.cs
- XmlElement.cs
- ImageSource.cs
- Emitter.cs
- SimpleTextLine.cs
- TreeViewImageIndexConverter.cs
- ApplicationException.cs