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
- ExpressionUtilities.cs
- HostProtectionPermission.cs
- XPathDocumentBuilder.cs
- Timer.cs
- DesignerLinkAdapter.cs
- HScrollBar.cs
- MethodSignatureGenerator.cs
- EntityDataSourceColumn.cs
- VariableAction.cs
- ObjectDataSourceView.cs
- _NegotiateClient.cs
- BitmapEffect.cs
- EntityContainerEmitter.cs
- TransformerConfigurationWizardBase.cs
- HttpInputStream.cs
- WaitHandleCannotBeOpenedException.cs
- PropertyGeneratedEventArgs.cs
- GridViewColumnCollectionChangedEventArgs.cs
- ToolStripDropTargetManager.cs
- httpstaticobjectscollection.cs
- XmlHelper.cs
- XPathMessageFilterElementCollection.cs
- GiveFeedbackEventArgs.cs
- BooleanStorage.cs
- TailPinnedEventArgs.cs
- Brush.cs
- SelectionBorderGlyph.cs
- View.cs
- ImplicitInputBrush.cs
- PixelShader.cs
- Light.cs
- KeyboardDevice.cs
- DataGridViewLayoutData.cs
- Completion.cs
- EventPropertyMap.cs
- WebPartsPersonalization.cs
- EntityDataSourceEntitySetNameItem.cs
- Timer.cs
- WebBrowserHelper.cs
- DataGridViewColumnHeaderCell.cs
- WebPartConnectionsEventArgs.cs
- CodeMethodReturnStatement.cs
- XmlSchemaDatatype.cs
- XamlSerializerUtil.cs
- InternalException.cs
- SafeCoTaskMem.cs
- ApplicationSecurityManager.cs
- StructureChangedEventArgs.cs
- CmsInterop.cs
- ToolStripGrip.cs
- MetadataUtil.cs
- DetailsViewPagerRow.cs
- TextDecorationCollectionConverter.cs
- ADConnectionHelper.cs
- FixUpCollection.cs
- GridViewColumnHeaderAutomationPeer.cs
- Grant.cs
- SafeNativeMethods.cs
- DurableOperationContext.cs
- SafeLocalMemHandle.cs
- HexParser.cs
- Size3DValueSerializer.cs
- DescendantOverDescendantQuery.cs
- HttpDebugHandler.cs
- HttpProfileGroupBase.cs
- Privilege.cs
- ViewCellRelation.cs
- GACIdentityPermission.cs
- XmlComment.cs
- InnerItemCollectionView.cs
- UnsafeNetInfoNativeMethods.cs
- SqlCharStream.cs
- MatrixCamera.cs
- AuditLog.cs
- CharAnimationUsingKeyFrames.cs
- TraceHwndHost.cs
- DeclaredTypeElement.cs
- AppearanceEditorPart.cs
- PartialCachingAttribute.cs
- PeerNodeTraceRecord.cs
- EditorZone.cs
- XmlSchemaSimpleContent.cs
- OdbcInfoMessageEvent.cs
- SqlUserDefinedAggregateAttribute.cs
- XmlSchemaGroupRef.cs
- MouseEvent.cs
- Geometry3D.cs
- SerializationInfoEnumerator.cs
- URLMembershipCondition.cs
- Size.cs
- ArraySubsetEnumerator.cs
- AddingNewEventArgs.cs
- SingleTagSectionHandler.cs
- IResourceProvider.cs
- XmlSchemaAnnotated.cs
- SessionEndingCancelEventArgs.cs
- Converter.cs
- UrlMappingsSection.cs
- DrawingContextDrawingContextWalker.cs
- SortedList.cs