Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- CacheEntry.cs
- ToolStripHighContrastRenderer.cs
- StreamedWorkflowDefinitionContext.cs
- CharStorage.cs
- ObfuscationAttribute.cs
- SettingsBindableAttribute.cs
- Transform.cs
- ClientType.cs
- DataGridItemEventArgs.cs
- TextPointer.cs
- SQLSingle.cs
- DisplayNameAttribute.cs
- CultureData.cs
- EmptyEnumerator.cs
- XslUrlEditor.cs
- UnknownWrapper.cs
- MenuItem.cs
- WeakReferenceList.cs
- SchemaElementDecl.cs
- WindowsGraphicsCacheManager.cs
- DataGridViewDataConnection.cs
- OutputCacheSection.cs
- ACE.cs
- MessageEncoder.cs
- XmlDocument.cs
- dbenumerator.cs
- ObjectView.cs
- FacetDescriptionElement.cs
- SiteMapProvider.cs
- DocumentXPathNavigator.cs
- PhysicalOps.cs
- ObjectContext.cs
- ShaperBuffers.cs
- ContractHandle.cs
- Content.cs
- EdmComplexTypeAttribute.cs
- cookiecontainer.cs
- IResourceProvider.cs
- WebPartConnectionsDisconnectVerb.cs
- ImageAutomationPeer.cs
- TextModifier.cs
- LineServicesRun.cs
- UpDownEvent.cs
- CutCopyPasteHelper.cs
- ConfigurationConverterBase.cs
- HttpValueCollection.cs
- ScriptingSectionGroup.cs
- Model3DCollection.cs
- DbProviderFactory.cs
- BamlRecordReader.cs
- FunctionCommandText.cs
- CopyOnWriteList.cs
- CorrelationManager.cs
- SimpleHandlerBuildProvider.cs
- XmlTextReader.cs
- EditorPartChrome.cs
- TiffBitmapEncoder.cs
- FixedPage.cs
- HeaderedContentControl.cs
- ListViewItem.cs
- WebBrowserPermission.cs
- UnmanagedMemoryStreamWrapper.cs
- CompilationUnit.cs
- WorkflowServiceHost.cs
- SqlCacheDependency.cs
- LogSwitch.cs
- BasicBrowserDialog.cs
- SqlCacheDependencyDatabaseCollection.cs
- RolePrincipal.cs
- StreamGeometry.cs
- DataGridViewCellParsingEventArgs.cs
- DataServiceCollectionOfT.cs
- xmlsaver.cs
- ErrorWrapper.cs
- ResourceDictionary.cs
- ExpressionNode.cs
- SelectionHighlightInfo.cs
- HybridCollection.cs
- GcSettings.cs
- ClaimComparer.cs
- ExtentKey.cs
- SplashScreenNativeMethods.cs
- SoapAttributeAttribute.cs
- ErrorWrapper.cs
- VoiceObjectToken.cs
- CompiledRegexRunnerFactory.cs
- AutomationPattern.cs
- CachedPathData.cs
- MethodBody.cs
- EdmConstants.cs
- Int32RectConverter.cs
- OpacityConverter.cs
- HTMLTagNameToTypeMapper.cs
- AttributeProviderAttribute.cs
- HTTPNotFoundHandler.cs
- DesignerForm.cs
- DataKey.cs
- WmlFormAdapter.cs
- InternalConfirm.cs
- CultureInfo.cs