Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DLinq / Dlinq / SqlClient / Common / InheritanceRules.cs / 1 / 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
- SafeCloseHandleCritical.cs
- DefaultShape.cs
- BackgroundWorker.cs
- XmlLinkedNode.cs
- AssemblyBuilder.cs
- EdmPropertyAttribute.cs
- wgx_exports.cs
- FormViewDeletedEventArgs.cs
- PanelContainerDesigner.cs
- ServerIdentity.cs
- Token.cs
- TextTreeNode.cs
- WindowsGrip.cs
- TextBlockAutomationPeer.cs
- Internal.cs
- precedingsibling.cs
- CodeAccessPermission.cs
- VScrollBar.cs
- localization.cs
- Authorization.cs
- DecoderFallback.cs
- NativeMethods.cs
- FixUp.cs
- JsonEncodingStreamWrapper.cs
- LinqDataSourceDeleteEventArgs.cs
- CommonGetThemePartSize.cs
- GeometryModel3D.cs
- ToolStripCodeDomSerializer.cs
- CodeIdentifiers.cs
- GridViewUpdateEventArgs.cs
- ApplyHostConfigurationBehavior.cs
- TableStyle.cs
- Stack.cs
- SqlGatherProducedAliases.cs
- SecurityRuntime.cs
- XmlArrayItemAttributes.cs
- WebPartCatalogAddVerb.cs
- DesignerValidationSummaryAdapter.cs
- Run.cs
- TextParentUndoUnit.cs
- IntegrationExceptionEventArgs.cs
- DispatcherSynchronizationContext.cs
- StringFormat.cs
- SocketStream.cs
- SByteConverter.cs
- SqlTopReducer.cs
- CodeDefaultValueExpression.cs
- DataGridViewCellStyleChangedEventArgs.cs
- InputGestureCollection.cs
- SqlGatherConsumedAliases.cs
- SqlCaseSimplifier.cs
- DispatcherExceptionEventArgs.cs
- WebPartTransformerCollection.cs
- ValueExpressions.cs
- UshortList2.cs
- SqlProviderServices.cs
- ClientRolePrincipal.cs
- Viewport3DAutomationPeer.cs
- UrlPath.cs
- MediaElement.cs
- WsatTransactionFormatter.cs
- SqlDependencyListener.cs
- HttpCapabilitiesEvaluator.cs
- MemoryMappedViewStream.cs
- ReturnEventArgs.cs
- ClientRoleProvider.cs
- DocobjHost.cs
- DocumentViewerAutomationPeer.cs
- PathSegmentCollection.cs
- UserControlParser.cs
- SessionStateItemCollection.cs
- TypeDescriptor.cs
- login.cs
- DataGridDetailsPresenterAutomationPeer.cs
- Types.cs
- XmlElementCollection.cs
- DataObject.cs
- SmiRecordBuffer.cs
- FormsAuthenticationTicket.cs
- SignedXml.cs
- SrgsGrammarCompiler.cs
- CompensationDesigner.cs
- CodeTypeDeclaration.cs
- PackageProperties.cs
- ActivityMarkupSerializer.cs
- StrongNamePublicKeyBlob.cs
- ColorAnimationBase.cs
- ComponentCollection.cs
- UIElement.cs
- TextSelectionHelper.cs
- TransformProviderWrapper.cs
- VisualProxy.cs
- SyndicationPerson.cs
- ComboBox.cs
- ZipIOLocalFileHeader.cs
- ToolStripItemCollection.cs
- SqlBulkCopyColumnMapping.cs
- XPathDocumentNavigator.cs
- StructuredCompositeActivityDesigner.cs
- GridPattern.cs