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
- DBSchemaRow.cs
- WizardPanelChangingEventArgs.cs
- LeafCellTreeNode.cs
- TemplateBindingExtension.cs
- OracleMonthSpan.cs
- RSAOAEPKeyExchangeDeformatter.cs
- EntityKeyElement.cs
- Tuple.cs
- ToolStripDesignerUtils.cs
- DirectoryRedirect.cs
- DetailsViewDeleteEventArgs.cs
- ListDictionary.cs
- MailWebEventProvider.cs
- CodeDomSerializer.cs
- BulletChrome.cs
- FontFamilyIdentifier.cs
- EditorBrowsableAttribute.cs
- XmlReader.cs
- DbDataAdapter.cs
- PropertyReferenceSerializer.cs
- FlowNode.cs
- TableColumnCollection.cs
- BindingMAnagerBase.cs
- AtomMaterializer.cs
- XmlSchemaAnyAttribute.cs
- DataRowCollection.cs
- DBDataPermission.cs
- CompilerScopeManager.cs
- TrustSection.cs
- MenuItemBinding.cs
- MenuItemBindingCollection.cs
- TextParagraphProperties.cs
- DataGridAddNewRow.cs
- UntrustedRecipientException.cs
- QueueNameHelper.cs
- XamlClipboardData.cs
- PeerObject.cs
- UserControlParser.cs
- DataGridCellAutomationPeer.cs
- SurrogateDataContract.cs
- ClassHandlersStore.cs
- BitConverter.cs
- PositiveTimeSpanValidator.cs
- WindowsFormsLinkLabel.cs
- _SslState.cs
- SQLChars.cs
- ParameterBuilder.cs
- XmlCharacterData.cs
- DelegatingStream.cs
- SqlVersion.cs
- ThreadInterruptedException.cs
- AppDomainProtocolHandler.cs
- PopupRoot.cs
- SqlCachedBuffer.cs
- ColorTransformHelper.cs
- AsyncPostBackErrorEventArgs.cs
- IndentedWriter.cs
- DynamicRendererThreadManager.cs
- NameValueConfigurationElement.cs
- GCHandleCookieTable.cs
- CustomErrorCollection.cs
- GeneralTransform3DGroup.cs
- BuildManagerHost.cs
- OdbcUtils.cs
- Knowncolors.cs
- EpmSourcePathSegment.cs
- SingleResultAttribute.cs
- AssemblyBuilder.cs
- BookmarkInfo.cs
- TemplateControlParser.cs
- TraceEventCache.cs
- PropertyItem.cs
- ZoneIdentityPermission.cs
- BinaryKeyIdentifierClause.cs
- ToolStripItemEventArgs.cs
- CustomAssemblyResolver.cs
- TypeDependencyAttribute.cs
- NamedPipeProcessProtocolHandler.cs
- InputGestureCollection.cs
- ViewStateModeByIdAttribute.cs
- TransformedBitmap.cs
- SHA512Managed.cs
- DataGridViewRowHeaderCell.cs
- SqlRewriteScalarSubqueries.cs
- ListDictionary.cs
- Journaling.cs
- WindowsAuthenticationModule.cs
- ObjectParameter.cs
- AnimatedTypeHelpers.cs
- XmlSchemaAnyAttribute.cs
- MetadataWorkspace.cs
- CodeTypeDelegate.cs
- LocationUpdates.cs
- COM2ComponentEditor.cs
- AssemblyBuilderData.cs
- IdleTimeoutMonitor.cs
- Pair.cs
- DataGridColumn.cs
- XPathLexer.cs
- WebConfigurationFileMap.cs