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
- ConfigurationManagerInternalFactory.cs
- JsonObjectDataContract.cs
- TextParaLineResult.cs
- JsonDataContract.cs
- WindowsAuthenticationModule.cs
- ScriptResourceAttribute.cs
- CollectionContainer.cs
- StringOutput.cs
- DateBoldEvent.cs
- MouseGestureValueSerializer.cs
- HandlerWithFactory.cs
- WpfKnownType.cs
- SafeRightsManagementHandle.cs
- ItemCheckedEvent.cs
- SqlIdentifier.cs
- SplineKeyFrames.cs
- DoneReceivingAsyncResult.cs
- StateItem.cs
- HostedElements.cs
- SettingsContext.cs
- ComplexLine.cs
- ClientRoleProvider.cs
- ProviderCommandInfoUtils.cs
- GACMembershipCondition.cs
- basenumberconverter.cs
- InputScopeManager.cs
- SettingsAttributes.cs
- SqlConnectionPoolProviderInfo.cs
- HtmlHead.cs
- FileEnumerator.cs
- SqlServer2KCompatibilityCheck.cs
- PrinterResolution.cs
- ApplicationProxyInternal.cs
- CompModSwitches.cs
- GeneralTransform3DGroup.cs
- ADMembershipProvider.cs
- EntityDataSourceWrapperCollection.cs
- ArrayList.cs
- BmpBitmapEncoder.cs
- DeclarativeCatalogPart.cs
- DisplayMemberTemplateSelector.cs
- PowerModeChangedEventArgs.cs
- ContentControl.cs
- XmlSchemaAnyAttribute.cs
- SortedList.cs
- MenuEventArgs.cs
- RectAnimationUsingKeyFrames.cs
- WorkerRequest.cs
- HandleExceptionArgs.cs
- SessionPageStateSection.cs
- DefaultValidator.cs
- TripleDES.cs
- Code.cs
- DataServiceContext.cs
- EntityTransaction.cs
- ProviderSettingsCollection.cs
- WindowsRegion.cs
- DeferredSelectedIndexReference.cs
- SoapExtensionReflector.cs
- IndexerHelper.cs
- HttpWebRequestElement.cs
- SqlInfoMessageEvent.cs
- MatchAttribute.cs
- CustomAttributeFormatException.cs
- SmiConnection.cs
- TreeNodeCollection.cs
- DynamicScriptObject.cs
- GraphicsContainer.cs
- SecurityException.cs
- CodeConditionStatement.cs
- CanonicalizationDriver.cs
- SqlTriggerAttribute.cs
- FormsAuthenticationEventArgs.cs
- ManagementObject.cs
- WorkflowWebHostingModule.cs
- BindingSourceDesigner.cs
- TypeSystem.cs
- TextComposition.cs
- SecurityRuntime.cs
- ADMembershipUser.cs
- XmlTextReaderImpl.cs
- ResXDataNode.cs
- ReferenceEqualityComparer.cs
- RTTrackingProfile.cs
- TypeUtil.cs
- CodeObject.cs
- AutomationPeer.cs
- ContentElement.cs
- CompModSwitches.cs
- ObjectPersistData.cs
- BasicExpandProvider.cs
- BitArray.cs
- DynamicMethod.cs
- UserMapPath.cs
- HtmlTableCellCollection.cs
- ErrorFormatter.cs
- XmlSchemaSet.cs
- XPathQilFactory.cs
- RawTextInputReport.cs
- ImageListStreamer.cs