Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / ModelProviders / DLinqColumnProvider.cs / 1305376 / DLinqColumnProvider.cs
using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Data.Linq; using System.Data.Linq.Mapping; using System.Globalization; using System.Reflection; using System.Text.RegularExpressions; using System.Xml.Linq; namespace System.Web.DynamicData.ModelProviders { internal sealed class DLinqColumnProvider : ColumnProvider { private static Regex s_varCharRegEx = new Regex(@"N?(?:Var)?Char\(([0-9]+)\)", RegexOptions.IgnoreCase); // accepts char, nchar, varchar, and nvarchar private AttributeCollection _attributes; private AssociationProvider _association; private bool _isAssociation; public DLinqColumnProvider(DLinqTableProvider table, MetaDataMember member) : base(table) { Member = member; Name = member.Name; ColumnType = GetMemberType(member); IsPrimaryKey = member.IsPrimaryKey; IsGenerated = member.IsDbGenerated; _isAssociation = member.IsAssociation; IsCustomProperty = !member.IsAssociation && Member.DbType == null; Nullable = Member.IsAssociation ? Member.Association.IsNullable : Member.CanBeNull; MaxLength = ProcessMaxLength(ColumnType, Member.DbType); IsSortable = ProcessIsSortable(ColumnType, Member.DbType); } public override AttributeCollection Attributes { get { if (!Member.IsDiscriminator) return base.Attributes; if (_attributes == null) { ListnewAttributes = new List (); bool foundScaffoldAttribute = false; foreach (Attribute attr in base.Attributes) { if (attr is ScaffoldColumnAttribute) { foundScaffoldAttribute = true; break; } newAttributes.Add(attr); } if (foundScaffoldAttribute) _attributes = base.Attributes; else { newAttributes.Add(new ScaffoldColumnAttribute(false)); _attributes = new AttributeCollection(newAttributes.ToArray()); } } return _attributes; } } // internal to facilitate unit testing internal static int ProcessMaxLength(Type memberType, String dbType) { // Only strings and chars that come in from a database have max lengths if (dbType == null || (memberType != typeof(string) && Misc.RemoveNullableFromType(memberType) != typeof(char))) return 0; if (dbType.StartsWith("NText", StringComparison.OrdinalIgnoreCase)) { return Int32.MaxValue >> 1; // see sql server 2005 spec for ntext } if (dbType.StartsWith("Text", StringComparison.OrdinalIgnoreCase)) { return Int32.MaxValue; // see sql server 2005 spec for text } if (dbType.StartsWith("NVarChar(MAX)", StringComparison.OrdinalIgnoreCase)) { return (Int32.MaxValue >> 1) - 2; // see sql server 2005 spec for nvarchar } if (dbType.StartsWith("VarChar(MAX)", StringComparison.OrdinalIgnoreCase)) { return Int32.MaxValue - 2; // see sql server 2005 spec for varchar } Match m = s_varCharRegEx.Match(dbType); if (m.Success) { return Int32.Parse(m.Groups[1].Value, CultureInfo.InvariantCulture); } return 0; } internal static bool ProcessIsSortable(Type memberType, String dbType) { if (dbType == null) return false; if (memberType == typeof(string) && (dbType.StartsWith("Text", StringComparison.OrdinalIgnoreCase) || dbType.StartsWith("NText", StringComparison.OrdinalIgnoreCase))) { return false; } if (memberType == typeof(Binary) && dbType.StartsWith("Image", StringComparison.OrdinalIgnoreCase)) { return false; } if (memberType == typeof(XElement)) { return false; } return true; } internal MetaDataMember Member { get; private set; } internal void Initialize() { if (_isAssociation && _association == null) { _association = new DLinqAssociationProvider(this); } } internal bool ShouldRemove { get; set; } private static Type GetMemberType(MetaDataMember member) { Type type = member.Type; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(EntitySet<>)) { return type.GetGenericArguments()[0]; } else { return type; } } #region IEntityMember Members public override PropertyInfo EntityTypeProperty { get { return (PropertyInfo)Member.Member; } } public override AssociationProvider Association { get { Initialize(); return _association; } } internal new bool IsForeignKeyComponent { set { base.IsForeignKeyComponent = value; } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Data.Linq; using System.Data.Linq.Mapping; using System.Globalization; using System.Reflection; using System.Text.RegularExpressions; using System.Xml.Linq; namespace System.Web.DynamicData.ModelProviders { internal sealed class DLinqColumnProvider : ColumnProvider { private static Regex s_varCharRegEx = new Regex(@"N?(?:Var)?Char\(([0-9]+)\)", RegexOptions.IgnoreCase); // accepts char, nchar, varchar, and nvarchar private AttributeCollection _attributes; private AssociationProvider _association; private bool _isAssociation; public DLinqColumnProvider(DLinqTableProvider table, MetaDataMember member) : base(table) { Member = member; Name = member.Name; ColumnType = GetMemberType(member); IsPrimaryKey = member.IsPrimaryKey; IsGenerated = member.IsDbGenerated; _isAssociation = member.IsAssociation; IsCustomProperty = !member.IsAssociation && Member.DbType == null; Nullable = Member.IsAssociation ? Member.Association.IsNullable : Member.CanBeNull; MaxLength = ProcessMaxLength(ColumnType, Member.DbType); IsSortable = ProcessIsSortable(ColumnType, Member.DbType); } public override AttributeCollection Attributes { get { if (!Member.IsDiscriminator) return base.Attributes; if (_attributes == null) { List newAttributes = new List (); bool foundScaffoldAttribute = false; foreach (Attribute attr in base.Attributes) { if (attr is ScaffoldColumnAttribute) { foundScaffoldAttribute = true; break; } newAttributes.Add(attr); } if (foundScaffoldAttribute) _attributes = base.Attributes; else { newAttributes.Add(new ScaffoldColumnAttribute(false)); _attributes = new AttributeCollection(newAttributes.ToArray()); } } return _attributes; } } // internal to facilitate unit testing internal static int ProcessMaxLength(Type memberType, String dbType) { // Only strings and chars that come in from a database have max lengths if (dbType == null || (memberType != typeof(string) && Misc.RemoveNullableFromType(memberType) != typeof(char))) return 0; if (dbType.StartsWith("NText", StringComparison.OrdinalIgnoreCase)) { return Int32.MaxValue >> 1; // see sql server 2005 spec for ntext } if (dbType.StartsWith("Text", StringComparison.OrdinalIgnoreCase)) { return Int32.MaxValue; // see sql server 2005 spec for text } if (dbType.StartsWith("NVarChar(MAX)", StringComparison.OrdinalIgnoreCase)) { return (Int32.MaxValue >> 1) - 2; // see sql server 2005 spec for nvarchar } if (dbType.StartsWith("VarChar(MAX)", StringComparison.OrdinalIgnoreCase)) { return Int32.MaxValue - 2; // see sql server 2005 spec for varchar } Match m = s_varCharRegEx.Match(dbType); if (m.Success) { return Int32.Parse(m.Groups[1].Value, CultureInfo.InvariantCulture); } return 0; } internal static bool ProcessIsSortable(Type memberType, String dbType) { if (dbType == null) return false; if (memberType == typeof(string) && (dbType.StartsWith("Text", StringComparison.OrdinalIgnoreCase) || dbType.StartsWith("NText", StringComparison.OrdinalIgnoreCase))) { return false; } if (memberType == typeof(Binary) && dbType.StartsWith("Image", StringComparison.OrdinalIgnoreCase)) { return false; } if (memberType == typeof(XElement)) { return false; } return true; } internal MetaDataMember Member { get; private set; } internal void Initialize() { if (_isAssociation && _association == null) { _association = new DLinqAssociationProvider(this); } } internal bool ShouldRemove { get; set; } private static Type GetMemberType(MetaDataMember member) { Type type = member.Type; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(EntitySet<>)) { return type.GetGenericArguments()[0]; } else { return type; } } #region IEntityMember Members public override PropertyInfo EntityTypeProperty { get { return (PropertyInfo)Member.Member; } } public override AssociationProvider Association { get { Initialize(); return _association; } } internal new bool IsForeignKeyComponent { set { base.IsForeignKeyComponent = value; } } #endregion } } // 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
- FontSizeConverter.cs
- RepeatButtonAutomationPeer.cs
- ClosureBinding.cs
- ValueConversionAttribute.cs
- ShellProvider.cs
- SplitContainer.cs
- Matrix3DConverter.cs
- StrokeNodeOperations2.cs
- MarkupObject.cs
- Size3D.cs
- FieldToken.cs
- designeractionbehavior.cs
- TransactedReceiveData.cs
- RegexStringValidatorAttribute.cs
- CompositeDispatchFormatter.cs
- HttpMethodConstraint.cs
- InternalControlCollection.cs
- OletxTransactionManager.cs
- XmlChoiceIdentifierAttribute.cs
- COM2AboutBoxPropertyDescriptor.cs
- odbcmetadatafactory.cs
- GPRECTF.cs
- CqlQuery.cs
- Table.cs
- ColumnResizeAdorner.cs
- CodeTypeOfExpression.cs
- XmlSchemaSimpleTypeList.cs
- XmlSchemaExporter.cs
- ColorAnimationUsingKeyFrames.cs
- MarkedHighlightComponent.cs
- DbConnectionPoolOptions.cs
- DateTimePicker.cs
- ItemCollection.cs
- TargetInvocationException.cs
- NeutralResourcesLanguageAttribute.cs
- DetailsViewUpdateEventArgs.cs
- Visitors.cs
- BamlRecordReader.cs
- BoundPropertyEntry.cs
- StrongNameUtility.cs
- WrapPanel.cs
- MaskPropertyEditor.cs
- SharedUtils.cs
- ScrollableControl.cs
- VariantWrapper.cs
- Misc.cs
- HelpEvent.cs
- SpeechSynthesizer.cs
- DataRecordInternal.cs
- SqlDataAdapter.cs
- WebEvents.cs
- BlockUIContainer.cs
- UnicodeEncoding.cs
- SmtpException.cs
- TypeValidationEventArgs.cs
- BamlCollectionHolder.cs
- ImageUrlEditor.cs
- SchemaNamespaceManager.cs
- SimpleApplicationHost.cs
- XmlElementCollection.cs
- GlyphingCache.cs
- FrameworkReadOnlyPropertyMetadata.cs
- ListChunk.cs
- RequestCacheEntry.cs
- SmiRecordBuffer.cs
- ToolZone.cs
- XmlHierarchicalEnumerable.cs
- unsafeIndexingFilterStream.cs
- UnrecognizedAssertionsBindingElement.cs
- UnmanagedMarshal.cs
- Control.cs
- HttpFileCollectionBase.cs
- XmlCharCheckingReader.cs
- GeometryConverter.cs
- DataGridViewDataConnection.cs
- GestureRecognitionResult.cs
- SerializationSectionGroup.cs
- CacheDependency.cs
- BaseResourcesBuildProvider.cs
- Connector.cs
- HMACSHA384.cs
- ResourceReferenceExpression.cs
- PrintPreviewDialog.cs
- MimeMapping.cs
- SoapElementAttribute.cs
- IdentityModelDictionary.cs
- ClassicBorderDecorator.cs
- DataGridTextBox.cs
- SubMenuStyle.cs
- SetMemberBinder.cs
- ErrorFormatterPage.cs
- PersonalizableTypeEntry.cs
- FrameworkElementFactoryMarkupObject.cs
- FastEncoderWindow.cs
- XmlSchemaSimpleType.cs
- DataKey.cs
- HuffModule.cs
- CodeTypeDelegate.cs
- SerializationFieldInfo.cs
- MdiWindowListItemConverter.cs