كيفية اكتشاف الحد الأقصى للطول الحقل في إطار الكيان في .NET 4؟

StackOverflow https://stackoverflow.com/questions/2545505

سؤال

بالنسبة الى هذه سؤال ، لا توجد طريقة مدمجة في EF V1 لمعرفة طول الحقل. هل يوجد مدمج طريقة للقيام بذلك في إطار الكيان الذي يشحن مع .NET 4 ، إذا كان الأمر كذلك - كيف؟

هل كانت مفيدة؟

المحلول

لا توجد طريقة جديدة للوصول إلى طول خاصية في EF 4.0. لا يزال يتعين عليك المشي فوق البيانات الوصفية - كما هو موضح في الإجابة المقبولة على السؤال الذي تشير إليه.

نصائح أخرى

هذا يعمل:

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;
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top