2010-03-30 3 views
9

this प्रश्न के मुताबिक, किसी क्षेत्र की लंबाई जानने के लिए ईएफ v1 में कोई अंतर्निहित तरीका नहीं है। क्या अंतर्निहित एंटीटी फ्रेमवर्क में ऐसा करने का तरीका है जो .NET 4 के साथ जहाजों, यदि हां - तो कैसे?.NET 4 में एंटीटी फ्रेमवर्क में फ़ील्ड अधिकतम लंबाई को कैसे ढूंढें?

उत्तर

7

ईएफ 4.0 में किसी संपत्ति की लंबाई तक पहुंचने का कोई नया तरीका नहीं है। आपको अभी भी मेटाडेटा पर चलना है - जैसा कि in the accepted answer on the question you reference दिखाया गया है।

एलेक्स जेम्स

पूर्व ईएफ टीम के सदस्य!

+0

यह एफई 5 के लिए मान्य है? –

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; 
     } 
    } 
} 
+0

उपयोग करने का उदाहरण: maxLength = GetMaxLength (उत्तरविंडकॉन्टेक्स्ट, उत्पाद => Product.QuantityPerUnit); –

+0

क्या यह http://stackoverflow.com/a/772556/52277 से समान (लेकिन छोटी) विधि से बेहतर है? –

संबंधित मुद्दे