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
- SqlLiftWhereClauses.cs
- DataPager.cs
- WebPartTransformerCollection.cs
- ClosableStream.cs
- Debug.cs
- SingleSelectRootGridEntry.cs
- InvalidProgramException.cs
- WindowAutomationPeer.cs
- NotifyInputEventArgs.cs
- ExpressionsCollectionConverter.cs
- WpfPayload.cs
- Aes.cs
- RC2CryptoServiceProvider.cs
- Model3DGroup.cs
- _BufferOffsetSize.cs
- QilIterator.cs
- StringUtil.cs
- TracingConnectionListener.cs
- MetadataArtifactLoaderCompositeResource.cs
- KoreanCalendar.cs
- DesignerSerializationVisibilityAttribute.cs
- RuleElement.cs
- OrCondition.cs
- ImpersonationContext.cs
- Label.cs
- NamespaceMapping.cs
- DataServiceKeyAttribute.cs
- SettingsPropertyCollection.cs
- LineSegment.cs
- GeneratedCodeAttribute.cs
- AdapterUtil.cs
- ElasticEase.cs
- XmlSchemaComplexType.cs
- future.cs
- XmlSigningNodeWriter.cs
- SqlError.cs
- XmlSerializableServices.cs
- ToolStripMenuItem.cs
- Context.cs
- StyleTypedPropertyAttribute.cs
- AppDomainShutdownMonitor.cs
- QueryConverter.cs
- SQlBooleanStorage.cs
- DataGridViewUtilities.cs
- InternalCache.cs
- GeometryDrawing.cs
- TimeManager.cs
- ExpressionBuilderContext.cs
- ScrollChrome.cs
- SchemaElementDecl.cs
- HitTestFilterBehavior.cs
- SqlCrossApplyToCrossJoin.cs
- FormsIdentity.cs
- Descriptor.cs
- DrawingContextWalker.cs
- UtilityExtension.cs
- ExecutionPropertyManager.cs
- MetadataFile.cs
- StorageComplexPropertyMapping.cs
- ListViewGroup.cs
- SafeBitVector32.cs
- QueryPageSettingsEventArgs.cs
- ValueUnavailableException.cs
- SafeBitVector32.cs
- Table.cs
- AspNetSynchronizationContext.cs
- ComponentChangingEvent.cs
- CharacterHit.cs
- XmlIlTypeHelper.cs
- OdbcConnection.cs
- Module.cs
- ParallelTimeline.cs
- ConnectionConsumerAttribute.cs
- LZCodec.cs
- MarkupCompilePass2.cs
- StickyNoteContentControl.cs
- NativeWindow.cs
- DbConnectionFactory.cs
- StyleBamlTreeBuilder.cs
- DataTableMapping.cs
- EndPoint.cs
- DataSet.cs
- PerspectiveCamera.cs
- NotificationContext.cs
- DateTimeValueSerializer.cs
- XPathCompileException.cs
- JsonMessageEncoderFactory.cs
- StrokeFIndices.cs
- DataTableTypeConverter.cs
- SspiNegotiationTokenAuthenticator.cs
- CqlLexerHelpers.cs
- GeometryCollection.cs
- StorageTypeMapping.cs
- UnsafeNativeMethods.cs
- RectangleF.cs
- ToolStripLocationCancelEventArgs.cs
- HighlightComponent.cs
- XPathNavigatorReader.cs
- UpdatePanelTriggerCollection.cs
- ThemeDirectoryCompiler.cs