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
- IncrementalCompileAnalyzer.cs
- MouseActionValueSerializer.cs
- HttpResponseHeader.cs
- CodeIterationStatement.cs
- RenderTargetBitmap.cs
- WebPartZoneDesigner.cs
- SchemaImporterExtension.cs
- DataGridViewAutoSizeModeEventArgs.cs
- DbMetaDataCollectionNames.cs
- IPCCacheManager.cs
- IsolatedStorageException.cs
- EncodingTable.cs
- ObjectDataSourceView.cs
- ConnectionOrientedTransportElement.cs
- InlineCollection.cs
- NullableDoubleAverageAggregationOperator.cs
- XamlPointCollectionSerializer.cs
- GridViewPageEventArgs.cs
- SecondaryIndexDefinition.cs
- DateTimeConstantAttribute.cs
- XamlPointCollectionSerializer.cs
- SimpleTextLine.cs
- PresentationTraceSources.cs
- AccessDataSource.cs
- StyleSelector.cs
- SuppressMessageAttribute.cs
- ConsoleTraceListener.cs
- Signature.cs
- BaseEntityWrapper.cs
- FaultHandlingFilter.cs
- DataGridViewTextBoxColumn.cs
- WebControlAdapter.cs
- TreeNodeCollection.cs
- IPGlobalProperties.cs
- InvalidTimeZoneException.cs
- FileUtil.cs
- PropertyEntry.cs
- WebPartZoneBase.cs
- datacache.cs
- Util.cs
- PriorityChain.cs
- ToolStripSplitButton.cs
- MD5CryptoServiceProvider.cs
- WindowsListView.cs
- XamlSerializerUtil.cs
- ImageConverter.cs
- DependentList.cs
- PrinterResolution.cs
- SmiEventSink_DeferedProcessing.cs
- ModelItemDictionaryImpl.cs
- FloaterBaseParaClient.cs
- PreProcessInputEventArgs.cs
- FormView.cs
- OletxResourceManager.cs
- CharEntityEncoderFallback.cs
- StickyNoteAnnotations.cs
- input.cs
- XmlSchemaGroupRef.cs
- Page.cs
- FixedPage.cs
- RequestCacheValidator.cs
- ProcessHostFactoryHelper.cs
- EncryptedKeyHashIdentifierClause.cs
- RadialGradientBrush.cs
- OrderedDictionary.cs
- RemoteArgument.cs
- AnimationClockResource.cs
- XmlElementAttributes.cs
- ReferenceService.cs
- ReverseQueryOperator.cs
- PackageDigitalSignatureManager.cs
- BitStream.cs
- IndexerNameAttribute.cs
- DashStyle.cs
- EntryWrittenEventArgs.cs
- TargetConverter.cs
- ContentElement.cs
- UpdatePanelTriggerCollection.cs
- ElementHostPropertyMap.cs
- Attributes.cs
- SequenceNumber.cs
- DataGridViewCellEventArgs.cs
- Vector3DValueSerializer.cs
- StorageMappingFragment.cs
- _Events.cs
- OrderedHashRepartitionStream.cs
- TypeNameParser.cs
- SchemaInfo.cs
- RefreshEventArgs.cs
- Exception.cs
- EntityDataSourceContextCreatedEventArgs.cs
- DataGridTable.cs
- Vector3DAnimation.cs
- Memoizer.cs
- ArithmeticException.cs
- LoadedEvent.cs
- SqlClientFactory.cs
- AsyncCallback.cs
- XmlCollation.cs
- TemplatePropertyEntry.cs