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
- ProbeRequestResponseAsyncResult.cs
- EventlogProvider.cs
- OpacityConverter.cs
- ThicknessConverter.cs
- RouteUrlExpressionBuilder.cs
- XamlToRtfParser.cs
- ColorDialog.cs
- NameGenerator.cs
- EventProperty.cs
- CaretElement.cs
- GlyphElement.cs
- BaseInfoTable.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- EmissiveMaterial.cs
- ConfigurationStrings.cs
- SignalGate.cs
- ArrayExtension.cs
- indexingfiltermarshaler.cs
- Base64Encoder.cs
- AnnotationService.cs
- ValueQuery.cs
- SimpleRecyclingCache.cs
- ExpressionBuilderCollection.cs
- EventLogPropertySelector.cs
- PackageStore.cs
- FilePrompt.cs
- EpmSyndicationContentSerializer.cs
- DataGridViewTopRowAccessibleObject.cs
- Mutex.cs
- Messages.cs
- SqlUtils.cs
- CodeAttributeDeclaration.cs
- FontWeightConverter.cs
- SerializationStore.cs
- NavigationProgressEventArgs.cs
- SpnegoTokenProvider.cs
- AsymmetricKeyExchangeDeformatter.cs
- ButtonChrome.cs
- X509Utils.cs
- SqlNodeAnnotations.cs
- OracleConnectionFactory.cs
- UIElement3D.cs
- NullRuntimeConfig.cs
- hwndwrapper.cs
- DataGridDetailsPresenterAutomationPeer.cs
- IImplicitResourceProvider.cs
- Types.cs
- ObjectDataSourceSelectingEventArgs.cs
- DataComponentGenerator.cs
- OleAutBinder.cs
- DesignerVerb.cs
- ILGenerator.cs
- XmlAttribute.cs
- TokenBasedSet.cs
- MorphHelper.cs
- PersonalizationEntry.cs
- ProtectedConfiguration.cs
- CriticalExceptions.cs
- WindowsListViewScroll.cs
- JavaScriptObjectDeserializer.cs
- InvalidAsynchronousStateException.cs
- ConsumerConnectionPointCollection.cs
- SiteOfOriginPart.cs
- EventDrivenDesigner.cs
- QueryInterceptorAttribute.cs
- ListViewItem.cs
- SoapReflectionImporter.cs
- TCPListener.cs
- DataSourceIDConverter.cs
- ResourceCodeDomSerializer.cs
- NameValueSectionHandler.cs
- TextTabProperties.cs
- PhysicalOps.cs
- AuthenticationManager.cs
- DataTableTypeConverter.cs
- XPathParser.cs
- Command.cs
- IsolatedStorageFileStream.cs
- KnownBoxes.cs
- DocumentsTrace.cs
- HMACSHA384.cs
- AttachmentService.cs
- FontDifferentiator.cs
- StructuralType.cs
- SchemaTableColumn.cs
- DebugHandleTracker.cs
- BuildProvidersCompiler.cs
- ReceiveActivityDesignerTheme.cs
- XamlTypeWithExplicitNamespace.cs
- ImageField.cs
- TraceEventCache.cs
- DrawTreeNodeEventArgs.cs
- StdValidatorsAndConverters.cs
- TreeWalkHelper.cs
- URLString.cs
- SQLDateTime.cs
- PointKeyFrameCollection.cs
- ModelItemExtensions.cs
- Events.cs
- webclient.cs