Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- OpenTypeCommon.cs
- EmitterCache.cs
- SafeArrayRankMismatchException.cs
- RegexReplacement.cs
- ContainerActivationHelper.cs
- InstanceView.cs
- UrlMapping.cs
- HtmlSelect.cs
- CommonDialog.cs
- ControlOperationBehavior.cs
- XmlSchemaInclude.cs
- BitmapCodecInfo.cs
- CompositeActivityCodeGenerator.cs
- AppDomainCompilerProxy.cs
- ReflectionTypeLoadException.cs
- _Win32.cs
- HttpResponseWrapper.cs
- EmptyStringExpandableObjectConverter.cs
- GroupBox.cs
- LinkConverter.cs
- CompletionCallbackWrapper.cs
- BaseAppDomainProtocolHandler.cs
- ListViewItem.cs
- BookmarkNameHelper.cs
- MouseGesture.cs
- DirtyTextRange.cs
- InvalidOleVariantTypeException.cs
- RtType.cs
- DetailsViewUpdatedEventArgs.cs
- Registry.cs
- XmlEventCache.cs
- StringValidator.cs
- TextTreeNode.cs
- DnsPermission.cs
- LateBoundBitmapDecoder.cs
- MarshalByRefObject.cs
- WsdlBuildProvider.cs
- ServiceDescriptionReflector.cs
- TimeZoneInfo.cs
- ISAPIRuntime.cs
- xmlfixedPageInfo.cs
- SignatureHelper.cs
- RefreshEventArgs.cs
- AccessKeyManager.cs
- MemberPath.cs
- GridItem.cs
- DefaultValueConverter.cs
- ExpressionBindingCollection.cs
- GeneralTransformGroup.cs
- StandardOleMarshalObject.cs
- ConnectionPoolManager.cs
- Panel.cs
- HashSet.cs
- TrackingQueryElement.cs
- StylusPointPropertyInfoDefaults.cs
- BaseUriHelper.cs
- ValueTypeFixupInfo.cs
- SqlVersion.cs
- DataGridTablesFactory.cs
- InteropBitmapSource.cs
- AvTrace.cs
- SpellerError.cs
- PrePostDescendentsWalker.cs
- ConstraintStruct.cs
- AppDomain.cs
- ByteRangeDownloader.cs
- newinstructionaction.cs
- MarshalDirectiveException.cs
- StringArrayConverter.cs
- SerializationStore.cs
- HostingEnvironmentException.cs
- DbConnectionClosed.cs
- WebPartVerb.cs
- recordstatefactory.cs
- DataSourceView.cs
- DataSourceControlBuilder.cs
- Propagator.ExtentPlaceholderCreator.cs
- NetworkCredential.cs
- Debug.cs
- PackagePartCollection.cs
- WebScriptServiceHost.cs
- TableLayoutSettingsTypeConverter.cs
- WebBrowserPermission.cs
- Misc.cs
- SHA256CryptoServiceProvider.cs
- Brush.cs
- WebBaseEventKeyComparer.cs
- FontCacheLogic.cs
- HandleScope.cs
- FileDialog.cs
- RepeaterItemCollection.cs
- GeneralTransform.cs
- Pen.cs
- MyContact.cs
- SectionXmlInfo.cs
- AssociationEndMember.cs
- SerializationFieldInfo.cs
- X509Extension.cs
- SaveFileDialog.cs
- XPathParser.cs