How to find out field maximum length in Entity Framework in .NET 4?

According to this question, there's no built-in way in EF v1 to figure out the length of a field. Is there a built-in way to do so in the Entity Framework that ships with .NET 4, if so - how?

Answers


There is no new way to access the length of a property in EF 4.0. You still have to walk over the metadata - as shown in the accepted answer on the question you reference.

Alex James

Former EF team member!


This acts:

using System;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;
using System.Linq;
using System.Linq.Expressions;

namespace EfWidgets
{
    public class EntityWidgets
    {
        public static int GetMaxLength<TEntity>(ObjectContext oc, Expression<Func<TEntity, string>> property)
            where TEntity : EntityObject
        {
            var test = oc.MetadataWorkspace.GetItems(DataSpace.CSpace);

            if (test == null)
                return -1;

            Type entType = typeof(TEntity);
            string propertyName = ((MemberExpression)property.Body).Member.Name;

            var q = test
                .Where(m => m.BuiltInTypeKind == BuiltInTypeKind.EntityType)
                .SelectMany(meta => ((EntityType)meta).Properties
                .Where(p => p.Name == propertyName && p.TypeUsage.EdmType.Name == "String"));

            var queryResult = q.Where(p =>
            {
                var match = p.DeclaringType.Name == entType.Name;
                if (!match)
                    match = entType.Name == p.DeclaringType.Name;

                return match;

            })
                .Select(sel => sel.TypeUsage.Facets["MaxLength"].Value)
                .ToList();

            if (queryResult.Any())
            {
                int result = Convert.ToInt32(queryResult.First());
                return result;
            }
            return -1;
        }
    }
}

Need Your Help

converting 'int' to 'long' or accessing too long array with 'long'

java arrays int long-integer

Let's say I have an array that is long enough to access any of its index with int, is there any way to access the index of such an array with long? And how the Java handle this kind of array? Examp...

Android: are images of the same size rendered differently if placed in different drawable folders?

android drawable render assets android-image

does an image of the same pixel dimensions in drawable-hdpi render the same or different in drawable-mdpi folder?