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
- FlowDocumentPage.cs
- CSharpCodeProvider.cs
- ServiceReference.cs
- TraceSection.cs
- LocalClientSecuritySettings.cs
- DbBuffer.cs
- _ListenerResponseStream.cs
- PartialArray.cs
- DbParameterHelper.cs
- CfgRule.cs
- DriveInfo.cs
- PageClientProxyGenerator.cs
- HandlerWithFactory.cs
- MediaElementAutomationPeer.cs
- DefaultIfEmptyQueryOperator.cs
- SerializationObjectManager.cs
- TimeSpanSecondsConverter.cs
- UnionExpr.cs
- Pkcs7Signer.cs
- PrintPreviewGraphics.cs
- XmlLinkedNode.cs
- QueryLifecycle.cs
- PropertyDescriptorComparer.cs
- Parameter.cs
- IRCollection.cs
- EventLogEntryCollection.cs
- Focus.cs
- DrawingVisual.cs
- CannotUnloadAppDomainException.cs
- PtsHelper.cs
- BatchParser.cs
- AccessedThroughPropertyAttribute.cs
- FullTextBreakpoint.cs
- _ConnectionGroup.cs
- SkinBuilder.cs
- CatalogPart.cs
- GroupQuery.cs
- TransformerInfo.cs
- COM2ColorConverter.cs
- VariableElement.cs
- InfoCardSymmetricCrypto.cs
- AppDomainGrammarProxy.cs
- QilDataSource.cs
- EdmSchemaAttribute.cs
- GetPageNumberCompletedEventArgs.cs
- DockAndAnchorLayout.cs
- ApplicationServiceManager.cs
- InputScopeConverter.cs
- Cast.cs
- BasicHttpMessageSecurity.cs
- NumberSubstitution.cs
- Marshal.cs
- ToggleButtonAutomationPeer.cs
- ManifestResourceInfo.cs
- ValueChangedEventManager.cs
- DesigntimeLicenseContext.cs
- EntityClientCacheEntry.cs
- Rules.cs
- Crypto.cs
- AutoScrollHelper.cs
- _ShellExpression.cs
- IteratorFilter.cs
- SubMenuStyleCollection.cs
- XsdCachingReader.cs
- TogglePattern.cs
- TypeToken.cs
- EndPoint.cs
- WebPartDisplayMode.cs
- Timer.cs
- MultiAsyncResult.cs
- InputLanguage.cs
- EventLogEntry.cs
- ControlPaint.cs
- RenderDataDrawingContext.cs
- KeySpline.cs
- StateFinalizationActivity.cs
- BindingGraph.cs
- ExeContext.cs
- PresentationTraceSources.cs
- ExceptionUtil.cs
- Vector3DKeyFrameCollection.cs
- RoleManagerSection.cs
- DataListItemCollection.cs
- DataTemplateKey.cs
- XmlSchema.cs
- IOException.cs
- GZipUtils.cs
- TaskDesigner.cs
- GraphicsPathIterator.cs
- WindowsButton.cs
- SslStream.cs
- HttpProtocolReflector.cs
- NumberAction.cs
- SendParametersContent.cs
- XmlDocumentSchema.cs
- FamilyTypeface.cs
- KnownBoxes.cs
- SystemFonts.cs
- TraceListener.cs
- Update.cs