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
- DbProviderConfigurationHandler.cs
- NotifyInputEventArgs.cs
- PrinterResolution.cs
- _ShellExpression.cs
- RepeatButtonAutomationPeer.cs
- Size.cs
- SqlNodeTypeOperators.cs
- Accessible.cs
- ImageSource.cs
- Point3D.cs
- RemoteX509Token.cs
- DecimalAnimation.cs
- basemetadatamappingvisitor.cs
- BaseCollection.cs
- TextControl.cs
- PeerMessageDispatcher.cs
- RectAnimationBase.cs
- NativeRecognizer.cs
- TypeUtils.cs
- CaseInsensitiveHashCodeProvider.cs
- RewritingValidator.cs
- WebPartConnectionsCancelEventArgs.cs
- LongValidator.cs
- PrefixHandle.cs
- DataGridViewUtilities.cs
- DialogWindow.cs
- validationstate.cs
- FileLevelControlBuilderAttribute.cs
- XmlEncoding.cs
- RuntimeEnvironment.cs
- AttributedMetaModel.cs
- InProcStateClientManager.cs
- OleDbPermission.cs
- WebPartTransformerCollection.cs
- GatewayDefinition.cs
- OracleTransaction.cs
- PageEventArgs.cs
- Stream.cs
- SettingsPropertyValue.cs
- ServiceProviders.cs
- SimpleHandlerFactory.cs
- OdbcParameterCollection.cs
- ControlBuilder.cs
- Selector.cs
- TouchesCapturedWithinProperty.cs
- ProviderUtil.cs
- COM2ComponentEditor.cs
- AnnotationComponentChooser.cs
- OleDbConnectionFactory.cs
- XmlEncodedRawTextWriter.cs
- AsyncOperation.cs
- DebugViewWriter.cs
- EnumerableRowCollectionExtensions.cs
- UrlMappingsSection.cs
- KeysConverter.cs
- Odbc32.cs
- ScriptHandlerFactory.cs
- NetTcpBinding.cs
- FormViewDeletedEventArgs.cs
- BulletedListEventArgs.cs
- ProviderUtil.cs
- PhysicalFontFamily.cs
- DesignerAttribute.cs
- FormatterConverter.cs
- UrlAuthFailureHandler.cs
- WindowsListViewItemCheckBox.cs
- XslVisitor.cs
- OleCmdHelper.cs
- WhitespaceRuleLookup.cs
- SyntaxCheck.cs
- RecognizedWordUnit.cs
- TextStore.cs
- TableItemPatternIdentifiers.cs
- DataStreams.cs
- AuthenticationService.cs
- ContextMenuService.cs
- TransformFinalBlockRequest.cs
- RemoteArgument.cs
- isolationinterop.cs
- ResXBuildProvider.cs
- XmlSerializerAssemblyAttribute.cs
- ScriptingSectionGroup.cs
- BitmapPalettes.cs
- FactoryMaker.cs
- UrlAuthFailedErrorFormatter.cs
- XmlParserContext.cs
- ContentElement.cs
- VScrollBar.cs
- Drawing.cs
- MenuScrollingVisibilityConverter.cs
- SizeConverter.cs
- MatrixCamera.cs
- ServiceBuildProvider.cs
- SqlMethodCallConverter.cs
- List.cs
- RegistrationServices.cs
- EdmComplexTypeAttribute.cs
- SelectionItemPattern.cs
- StandardTransformFactory.cs
- COAUTHIDENTITY.cs