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
- DataGridRow.cs
- Activity.cs
- ConfigurationProperty.cs
- GeneralTransformGroup.cs
- DataGridHeaderBorder.cs
- WebPartsPersonalization.cs
- Encoding.cs
- GroupItemAutomationPeer.cs
- GridViewCommandEventArgs.cs
- CodeCompileUnit.cs
- DbReferenceCollection.cs
- FileLevelControlBuilderAttribute.cs
- ZipIOExtraField.cs
- XmlNotation.cs
- SystemDiagnosticsSection.cs
- RawKeyboardInputReport.cs
- CallSiteBinder.cs
- MobileComponentEditorPage.cs
- InstallerTypeAttribute.cs
- UInt32.cs
- Item.cs
- EventLogInformation.cs
- ZeroOpNode.cs
- RotationValidation.cs
- CounterSample.cs
- ObjectHandle.cs
- PictureBox.cs
- TypeLibConverter.cs
- PageThemeParser.cs
- login.cs
- PropertyDescriptor.cs
- MethodAccessException.cs
- HttpListenerElement.cs
- StateDesigner.LayoutSelectionGlyph.cs
- FrameworkContentElement.cs
- SubpageParagraph.cs
- WasAdminWrapper.cs
- HttpListenerContext.cs
- BamlMapTable.cs
- AttributedMetaModel.cs
- WebConfigurationManager.cs
- SemanticResolver.cs
- AutomationProperties.cs
- TreeNodeCollection.cs
- FontStretch.cs
- KnownBoxes.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- UndirectedGraph.cs
- ToolStripProgressBar.cs
- FrameSecurityDescriptor.cs
- StatusBarDrawItemEvent.cs
- OLEDB_Enum.cs
- BufferModeSettings.cs
- RelatedPropertyManager.cs
- MemberMemberBinding.cs
- PrimitiveDataContract.cs
- TdsParserSessionPool.cs
- HttpRequestWrapper.cs
- IndexerNameAttribute.cs
- RelationshipEndMember.cs
- XmlRawWriterWrapper.cs
- ListViewItem.cs
- FixedPageStructure.cs
- Viewport3DVisual.cs
- MessageSmuggler.cs
- WeakRefEnumerator.cs
- CodeBinaryOperatorExpression.cs
- ViewRendering.cs
- EncodingTable.cs
- Int64Animation.cs
- Compilation.cs
- SqlDataSourceTableQuery.cs
- BaseTemplateBuildProvider.cs
- SqlTopReducer.cs
- PersistChildrenAttribute.cs
- Int16Converter.cs
- DecimalFormatter.cs
- DataGridViewEditingControlShowingEventArgs.cs
- MessageQuerySet.cs
- WebBrowsableAttribute.cs
- CounterSetInstance.cs
- InstanceKey.cs
- SpeakProgressEventArgs.cs
- CheckBoxRenderer.cs
- SendSecurityHeaderElement.cs
- RepeatButtonAutomationPeer.cs
- ListViewDeleteEventArgs.cs
- NameScope.cs
- BaseCAMarshaler.cs
- HtmlInputCheckBox.cs
- MemberRestriction.cs
- ArrangedElement.cs
- SqlWorkflowPersistenceService.cs
- SliderAutomationPeer.cs
- SeekStoryboard.cs
- DeferredReference.cs
- DataGridState.cs
- PointAnimationClockResource.cs
- TypefaceMetricsCache.cs
- GenericPrincipal.cs