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
- PaintEvent.cs
- StringFunctions.cs
- NumberFunctions.cs
- AncillaryOps.cs
- DecoderReplacementFallback.cs
- WebPartManager.cs
- BitmapEffectCollection.cs
- LiteralControl.cs
- ItemsControlAutomationPeer.cs
- UnitySerializationHolder.cs
- Error.cs
- FixedSOMContainer.cs
- DecimalAnimationUsingKeyFrames.cs
- SynchronizationLockException.cs
- SQLCharsStorage.cs
- FontFamilyConverter.cs
- AnimatedTypeHelpers.cs
- DragEvent.cs
- ProcessModuleCollection.cs
- DataGridViewAutoSizeModeEventArgs.cs
- ReadWriteControlDesigner.cs
- ComponentResourceManager.cs
- ApplicationInfo.cs
- SplashScreenNativeMethods.cs
- DesignOnlyAttribute.cs
- ClientScriptManager.cs
- DataGridViewLinkColumn.cs
- StyleSheet.cs
- PageThemeParser.cs
- DynamicMethod.cs
- RegexCompiler.cs
- ClassicBorderDecorator.cs
- x509store.cs
- HMAC.cs
- PersonalizationProvider.cs
- NamespaceList.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- SignatureHelper.cs
- CompatibleIComparer.cs
- PowerModeChangedEventArgs.cs
- CommentEmitter.cs
- SqlClientPermission.cs
- ModifierKeysValueSerializer.cs
- FastPropertyAccessor.cs
- IisTraceListener.cs
- ObjectItemConventionAssemblyLoader.cs
- InternalResources.cs
- TextComposition.cs
- TypefaceCollection.cs
- HashHelper.cs
- ClientSponsor.cs
- Main.cs
- ScriptReferenceEventArgs.cs
- QueryContinueDragEventArgs.cs
- DeviceFilterEditorDialog.cs
- TableParaClient.cs
- SystemIcmpV4Statistics.cs
- ConsumerConnectionPointCollection.cs
- MemoryStream.cs
- ConfigXmlComment.cs
- SqlDependencyUtils.cs
- CancellationTokenSource.cs
- HttpListenerPrefixCollection.cs
- EntityDataSourceDesignerHelper.cs
- RootProfilePropertySettingsCollection.cs
- LambdaCompiler.Expressions.cs
- FamilyCollection.cs
- WmlLiteralTextAdapter.cs
- bidPrivateBase.cs
- ToolStripGrip.cs
- XmlSchemaComplexContentExtension.cs
- ConnectionManagementElementCollection.cs
- storepermission.cs
- ACE.cs
- WebCategoryAttribute.cs
- WebPartChrome.cs
- RegexCharClass.cs
- PopupRoot.cs
- WeakRefEnumerator.cs
- SettingsPropertyValueCollection.cs
- FileStream.cs
- BitHelper.cs
- DbParameterCollectionHelper.cs
- CachedFontFamily.cs
- XmlSchemaValidator.cs
- DataGridViewCellMouseEventArgs.cs
- XmlResolver.cs
- LineProperties.cs
- OperandQuery.cs
- DefaultAutoFieldGenerator.cs
- SessionState.cs
- CommandBindingCollection.cs
- BeginStoryboard.cs
- LogManagementAsyncResult.cs
- Roles.cs
- IdleTimeoutMonitor.cs
- DataGridColumnFloatingHeader.cs
- ITreeGenerator.cs
- CommunicationObject.cs
- Visual.cs