Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DLinq / Dlinq / SqlClient / Common / InheritanceRules.cs / 1 / 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
- XmlCDATASection.cs
- PrivateFontCollection.cs
- EventToken.cs
- NonSerializedAttribute.cs
- InvalidEnumArgumentException.cs
- MetadataArtifactLoaderCompositeFile.cs
- ExpressionConverter.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- SocketPermission.cs
- TraceLog.cs
- LinqDataSource.cs
- ProtocolsConfiguration.cs
- TextEditorParagraphs.cs
- BookmarkEventArgs.cs
- DateTimeConstantAttribute.cs
- UnionCodeGroup.cs
- DataKeyCollection.cs
- TreeView.cs
- ItemsPanelTemplate.cs
- MonthCalendar.cs
- Message.cs
- HierarchicalDataBoundControl.cs
- Stylesheet.cs
- DTCTransactionManager.cs
- StringDictionaryWithComparer.cs
- DocumentXPathNavigator.cs
- FilterQuery.cs
- ObjectCacheSettings.cs
- DataSourceSelectArguments.cs
- StringSorter.cs
- DotAtomReader.cs
- ObjectHelper.cs
- ResourceExpression.cs
- RefExpr.cs
- VerificationAttribute.cs
- SamlConditions.cs
- ThousandthOfEmRealPoints.cs
- DataPagerField.cs
- MiniCustomAttributeInfo.cs
- ValidationResult.cs
- UTF8Encoding.cs
- SqlServices.cs
- StringFunctions.cs
- _ProxyChain.cs
- WriteFileContext.cs
- VisualBasicSettingsHandler.cs
- ILGenerator.cs
- Input.cs
- InvariantComparer.cs
- PointKeyFrameCollection.cs
- ScopedKnownTypes.cs
- InheritanceService.cs
- GcHandle.cs
- CompilerScopeManager.cs
- UnsafeNativeMethods.cs
- ToolStripProgressBar.cs
- TextEndOfSegment.cs
- SQLSingle.cs
- controlskin.cs
- SystemException.cs
- HwndSourceKeyboardInputSite.cs
- EncryptedXml.cs
- SimpleTableProvider.cs
- DataServiceQueryException.cs
- WebPartEditorCancelVerb.cs
- TargetFrameworkAttribute.cs
- Policy.cs
- GrammarBuilderWildcard.cs
- XmlSerializer.cs
- CompilerState.cs
- DbParameterCollectionHelper.cs
- ToolStripControlHost.cs
- HashMembershipCondition.cs
- HtmlInputReset.cs
- UIElementIsland.cs
- BinaryObjectReader.cs
- WbemProvider.cs
- EndpointBehaviorElementCollection.cs
- DiagnosticTrace.cs
- QueryOutputWriter.cs
- InstallerTypeAttribute.cs
- ContractNamespaceAttribute.cs
- CheckBoxRenderer.cs
- MetadataCache.cs
- ActivityWithResultConverter.cs
- EntityTypeEmitter.cs
- ToolboxItemLoader.cs
- GridView.cs
- Monitor.cs
- Perspective.cs
- WpfXamlLoader.cs
- TemplatePartAttribute.cs
- StrokeNodeEnumerator.cs
- HtmlElementCollection.cs
- MexHttpsBindingElement.cs
- WebPartRestoreVerb.cs
- XmlSerializableServices.cs
- MouseBinding.cs
- BoolExpressionVisitors.cs
- PartialCachingControl.cs