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
- SerializationInfo.cs
- EntityObject.cs
- SchemaImporterExtensionsSection.cs
- RelatedPropertyManager.cs
- ObfuscateAssemblyAttribute.cs
- EndpointIdentityExtension.cs
- SiteMembershipCondition.cs
- IntPtr.cs
- _SSPISessionCache.cs
- WebPartMovingEventArgs.cs
- GPPOINTF.cs
- HtmlFormWrapper.cs
- StringSource.cs
- SelectionUIHandler.cs
- DecoderExceptionFallback.cs
- SpellerError.cs
- HwndProxyElementProvider.cs
- TextDecorationLocationValidation.cs
- ErrorRuntimeConfig.cs
- DesignerHelpers.cs
- externdll.cs
- SqlLiftIndependentRowExpressions.cs
- ScriptDescriptor.cs
- PriorityRange.cs
- PageSettings.cs
- FormsAuthenticationConfiguration.cs
- InstanceNameConverter.cs
- BindingBase.cs
- SamlAuthenticationClaimResource.cs
- EntityDataSourceContextCreatingEventArgs.cs
- XamlPathDataSerializer.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- ColumnMapCopier.cs
- BlockCollection.cs
- HostExecutionContextManager.cs
- CompatibleComparer.cs
- XmlSchemas.cs
- ParameterModifier.cs
- HtmlFormWrapper.cs
- DataControlButton.cs
- DocumentPageTextView.cs
- EnumConverter.cs
- CheckBoxField.cs
- XmlLangPropertyAttribute.cs
- Condition.cs
- ListManagerBindingsCollection.cs
- VSWCFServiceContractGenerator.cs
- LicenseManager.cs
- _Rfc2616CacheValidators.cs
- PointLight.cs
- HtmlTableRow.cs
- WindowsAuthenticationEventArgs.cs
- SimplePropertyEntry.cs
- Sequence.cs
- SecurityKeyIdentifier.cs
- ToolStripHighContrastRenderer.cs
- FontCollection.cs
- InsufficientExecutionStackException.cs
- ActivatableWorkflowsQueryResult.cs
- ActivityCodeGenerator.cs
- SqlDataSourceQueryConverter.cs
- XmlnsDictionary.cs
- XPathBinder.cs
- PrintDialog.cs
- FixedSOMTableCell.cs
- NumberFunctions.cs
- UpdateCommand.cs
- dtdvalidator.cs
- ImplicitInputBrush.cs
- SchemaImporter.cs
- SpecialNameAttribute.cs
- RuntimeResourceSet.cs
- TagMapInfo.cs
- XmlSiteMapProvider.cs
- AspProxy.cs
- PropertyDescriptorComparer.cs
- ListBox.cs
- MultiBindingExpression.cs
- XmlAttributeCollection.cs
- ExportOptions.cs
- Context.cs
- HelpProvider.cs
- NullableFloatMinMaxAggregationOperator.cs
- DockProviderWrapper.cs
- LocatorBase.cs
- CompiledELinqQueryState.cs
- AudioSignalProblemOccurredEventArgs.cs
- StringDictionaryCodeDomSerializer.cs
- ItemsControlAutomationPeer.cs
- XmlnsDefinitionAttribute.cs
- WindowsFormsSectionHandler.cs
- ValueProviderWrapper.cs
- Messages.cs
- FormViewDeletedEventArgs.cs
- Journaling.cs
- PropertyMetadata.cs
- TreeWalker.cs
- Transform3D.cs
- AliasGenerator.cs
- StringFreezingAttribute.cs