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
- HandleRef.cs
- GenericTypeParameterBuilder.cs
- StateDesigner.Layouts.cs
- TransformDescriptor.cs
- QueryExpression.cs
- DesignerTextViewAdapter.cs
- TraceFilter.cs
- RegexMatch.cs
- WebPartVerbsEventArgs.cs
- AnnotationService.cs
- BindableAttribute.cs
- ImageIndexEditor.cs
- StylusSystemGestureEventArgs.cs
- ComponentChangingEvent.cs
- FilterException.cs
- CDSsyncETWBCLProvider.cs
- ObjectRef.cs
- TemplatePropertyEntry.cs
- DataGridViewCellStyleConverter.cs
- RegexWriter.cs
- WhereaboutsReader.cs
- UnmanagedMemoryStreamWrapper.cs
- SettingsPropertyWrongTypeException.cs
- WebPartEditVerb.cs
- FormatConvertedBitmap.cs
- CounterSample.cs
- Point3D.cs
- PowerModeChangedEventArgs.cs
- GlobalizationSection.cs
- Monitor.cs
- TreeNodeCollection.cs
- MimeWriter.cs
- DBDataPermission.cs
- MetafileEditor.cs
- HttpInputStream.cs
- SID.cs
- SizeConverter.cs
- InkSerializer.cs
- FileLoadException.cs
- TextWriter.cs
- ValidatingReaderNodeData.cs
- PropertyToken.cs
- WebServiceClientProxyGenerator.cs
- InheritanceContextChangedEventManager.cs
- _HelperAsyncResults.cs
- _TransmitFileOverlappedAsyncResult.cs
- ZeroOpNode.cs
- OleDbTransaction.cs
- MasterPage.cs
- SystemDiagnosticsSection.cs
- HtmlUtf8RawTextWriter.cs
- DataGridViewCellEventArgs.cs
- ServiceModelActivationSectionGroup.cs
- COM2PropertyDescriptor.cs
- MetadataResolver.cs
- ReflectTypeDescriptionProvider.cs
- MimePart.cs
- IxmlLineInfo.cs
- AssemblyAssociatedContentFileAttribute.cs
- GatewayIPAddressInformationCollection.cs
- AudioLevelUpdatedEventArgs.cs
- LicenseContext.cs
- ErrorFormatter.cs
- documentation.cs
- XsdDuration.cs
- Contracts.cs
- PeerMessageDispatcher.cs
- CompilerGlobalScopeAttribute.cs
- XmlTypeAttribute.cs
- Style.cs
- InputProviderSite.cs
- StrokeNodeData.cs
- DataTableMappingCollection.cs
- RoleGroup.cs
- FixedTextBuilder.cs
- StrokeNodeOperations.cs
- MetabaseSettings.cs
- CorrelationManager.cs
- BmpBitmapDecoder.cs
- TimeoutValidationAttribute.cs
- XmlSerializableReader.cs
- FixedStringLookup.cs
- Stylesheet.cs
- Figure.cs
- FormViewPagerRow.cs
- MenuItemStyle.cs
- ConfigXmlComment.cs
- SafeCoTaskMem.cs
- MethodBuilder.cs
- arclist.cs
- ImageButton.cs
- DictionaryBase.cs
- DataQuery.cs
- TraceSection.cs
- XPathNodeHelper.cs
- ResourceAssociationTypeEnd.cs
- DiscoveryRequestHandler.cs
- NamedElement.cs
- assertwrapper.cs
- GifBitmapDecoder.cs