Dot-Net

如何在 .NET 4 中找出實體框架中的欄位最大長度?

  • August 25, 2019

根據這個問題,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;
       }
   }
}

引用自:https://stackoverflow.com/questions/2545505