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
- CompositionAdorner.cs
- TraceContextRecord.cs
- VScrollBar.cs
- EventRouteFactory.cs
- CodeSnippetTypeMember.cs
- XmlDictionaryWriter.cs
- TextPointer.cs
- EntitySetBaseCollection.cs
- HyperLinkField.cs
- AuthenticationService.cs
- RowToParametersTransformer.cs
- UpdateRecord.cs
- WebPartAddingEventArgs.cs
- Quaternion.cs
- CheckoutException.cs
- SettingsPropertyCollection.cs
- Latin1Encoding.cs
- DataGridViewControlCollection.cs
- HierarchicalDataBoundControl.cs
- EventLogEntry.cs
- CompressedStack.cs
- DataViewManager.cs
- DefaultAssemblyResolver.cs
- CapabilitiesState.cs
- DataGridViewDataErrorEventArgs.cs
- QilPatternVisitor.cs
- HttpModuleCollection.cs
- GeometryGroup.cs
- MatchingStyle.cs
- PrimarySelectionAdorner.cs
- TablePattern.cs
- PersonalizationDictionary.cs
- EntityKeyElement.cs
- ServiceRouteHandler.cs
- EncoderNLS.cs
- WebPartTracker.cs
- DbExpressionVisitor.cs
- FrugalMap.cs
- HtmlInputSubmit.cs
- DataRow.cs
- DependencyProperty.cs
- coordinatorscratchpad.cs
- Symbol.cs
- HtmlWindow.cs
- BaseCollection.cs
- Int16.cs
- ListBoxItem.cs
- Publisher.cs
- StateDesigner.cs
- AsymmetricKeyExchangeDeformatter.cs
- ClientRequest.cs
- SystemIcmpV4Statistics.cs
- NamespaceDecl.cs
- Vector3dCollection.cs
- NeutralResourcesLanguageAttribute.cs
- cookie.cs
- FunctionMappingTranslator.cs
- CheckBoxField.cs
- XmlConverter.cs
- BooleanStorage.cs
- AttributeData.cs
- VariableQuery.cs
- XmlNullResolver.cs
- DataSourceCacheDurationConverter.cs
- ManifestResourceInfo.cs
- SiteMapDesignerDataSourceView.cs
- DoubleLinkList.cs
- CounterCreationData.cs
- ProtocolsConfiguration.cs
- XmlSerializerFactory.cs
- DefaultShape.cs
- MultipleCopiesCollection.cs
- OutputCacheSettingsSection.cs
- SafeNativeMethodsCLR.cs
- DataObjectEventArgs.cs
- PackWebResponse.cs
- TemplatePartAttribute.cs
- WinEventHandler.cs
- NativeCompoundFileAPIs.cs
- Metadata.cs
- ExpressionSelection.cs
- _TransmitFileOverlappedAsyncResult.cs
- ToolStripManager.cs
- RbTree.cs
- ClusterSafeNativeMethods.cs
- TextRangeProviderWrapper.cs
- QilCloneVisitor.cs
- Vector3DValueSerializer.cs
- ImpersonateTokenRef.cs
- WorkflowLayouts.cs
- SizeValueSerializer.cs
- DefaultEventAttribute.cs
- GridViewSortEventArgs.cs
- PageVisual.cs
- CallContext.cs
- FormsAuthentication.cs
- ZipIOCentralDirectoryFileHeader.cs
- HttpResponseHeader.cs
- TextSelectionHelper.cs
- TextEditorSelection.cs