Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ResourceDictionary.cs
- DEREncoding.cs
- SqlDataSourceFilteringEventArgs.cs
- RC2.cs
- WebPartConnectionsDisconnectVerb.cs
- XmlSchemaImport.cs
- WebFormDesignerActionService.cs
- GeneralTransformCollection.cs
- GregorianCalendarHelper.cs
- AstTree.cs
- XmlDigitalSignatureProcessor.cs
- SchemaImporter.cs
- Multiply.cs
- xmlsaver.cs
- Automation.cs
- ChangeBlockUndoRecord.cs
- DynamicFilter.cs
- RectAnimationClockResource.cs
- TreeView.cs
- BrushMappingModeValidation.cs
- CheckBoxAutomationPeer.cs
- HostingPreferredMapPath.cs
- FormViewInsertEventArgs.cs
- complextypematerializer.cs
- CodeTypeParameterCollection.cs
- TransportConfigurationTypeElement.cs
- RevocationPoint.cs
- Timer.cs
- Expressions.cs
- InfoCardSymmetricCrypto.cs
- XmlSchemaAttributeGroupRef.cs
- ConnectionOrientedTransportElement.cs
- LocalValueEnumerator.cs
- PartManifestEntry.cs
- EventLogEntryCollection.cs
- TimeSpanSecondsConverter.cs
- BaseAsyncResult.cs
- WinCategoryAttribute.cs
- TextEffectResolver.cs
- DataControlLinkButton.cs
- XamlSerializerUtil.cs
- Color.cs
- ClickablePoint.cs
- ProfileManager.cs
- DataServiceSaveChangesEventArgs.cs
- PresentationAppDomainManager.cs
- AudioFileOut.cs
- BufferModeSettings.cs
- AsymmetricKeyExchangeDeformatter.cs
- SafeNativeMethodsCLR.cs
- QueryReaderSettings.cs
- SessionSwitchEventArgs.cs
- SQLDouble.cs
- NodeInfo.cs
- WorkflowValidationFailedException.cs
- RSACryptoServiceProvider.cs
- DesignerContextDescriptor.cs
- Transform3D.cs
- SortKey.cs
- DataControlReferenceCollection.cs
- RolePrincipal.cs
- CombinedTcpChannel.cs
- OutputCacheSettings.cs
- MailMessageEventArgs.cs
- FormViewActionList.cs
- CqlParser.cs
- DataGridViewColumnHeaderCell.cs
- SafeCertificateStore.cs
- CircleHotSpot.cs
- TimeoutException.cs
- StringComparer.cs
- DeferredReference.cs
- RadioButtonStandardAdapter.cs
- ProjectionPathBuilder.cs
- WebBaseEventKeyComparer.cs
- Point3DAnimationBase.cs
- CultureData.cs
- DataAccessException.cs
- SqlDataReader.cs
- EditorZoneBase.cs
- ServerIdentity.cs
- HandleTable.cs
- MonthChangedEventArgs.cs
- SqlInfoMessageEvent.cs
- ItemsChangedEventArgs.cs
- ConditionCollection.cs
- CompilerGlobalScopeAttribute.cs
- mediapermission.cs
- DockPatternIdentifiers.cs
- TdsParserStateObject.cs
- RepeatBehaviorConverter.cs
- ObjectItemCollection.cs
- XhtmlBasicPageAdapter.cs
- EventDescriptor.cs
- SessionParameter.cs
- SqlAliasesReferenced.cs
- Byte.cs
- ToolStripDropDownButton.cs
- unsafenativemethodsother.cs
- XmlObjectSerializerWriteContextComplex.cs