Dot-Net
如何在 .NET 4 中找出實體框架中的欄位最大長度?
根據這個問題,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; } } }