2015-09-19 6 views
9

पर मैं स्ट्रिंग एपीआई का उपयोग कर एक ईएफ 6 कोड पहला मॉडल बना रहा हूं। मेरी समझ डिफ़ॉल्ट रूप से है, स्ट्रिंग्स nvarchar (अधिकतम) होगी, जो (धुंधला होना) डिफ़ॉल्ट के लिए गूंगा है। तो मैं 255 वर्ण अधिकतम डिफ़ॉल्ट लंबाई सेट करने के लिए इन नियमों का पालन कोड कहा:ईएफ 6 कोड सेट करें पहले स्ट्रिंग्स nvarchar (अधिकतम)

 modelBuilder.Properties<string>() 
      .Configure(p => p.HasMaxLength(255)); 

तो मैं तो जैसे एक डेकोरेटर बनाया:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 
public class TextAttribute : Attribute 
{ 
} 

मैं विशिष्ट स्ट्रिंग गुण को यह लागू करना चाहते हैं कि मैं वास्तव में NVARCHAR (MAX) बनना चाहते हैं।

यह सुनिश्चित करने के लिए कि मैं [text] सजावट वाले सभी स्ट्रिंग गुणों को डीवी में एनवीएआरएआरएआर (MAX) के साथ बनाया गया है, सुनिश्चित करने के लिए धाराप्रवाह एपीआई में क्या रखा जाए? मुझे लगता है कि यह ऐसा कुछ होगा:

 modelBuilder.Properties<string>() 
      .Where(p => p.CustomAttributes.Any(a => typeof(TextAttribute).IsAssignableFrom(a.AttributeType))) 
      .Configure(p => p.HasMaxLength(?????)); 

या क्या मैं यह पूरी तरह गलत कर रहा हूं?

उत्तर

14

मुझे नहीं पता कि अब तक आपको कोई जवाब मिला है, लेकिन अगर कोई और सोच रहा है कि यह कैसे करना है, तो बस SQL ​​डेटाटाइप सेट करें और HasMaxLength() आमंत्रण को अनदेखा करें।

 modelBuilder.Properties<string>() 
      .Where(p => p.CustomAttributes.Any(a => typeof(TextAttribute).IsAssignableFrom(a.AttributeType))) 
      .Configure(p => p.HasColumnType("nvarchar(max)")); 

का उपयोग IsMaxLength() या HasMaxLength (शून्य) NVARCHAR के क्षेत्र स्थापित करेगा (4000) (varchar (8000) अगर varchar के रूप में डेटा प्रकार को निर्दिष्ट)।

7

आप एक EntityTypeConfiguration<MyEntity> वर्ग के भीतर यह कर रहे हैं, यह @ RickNo के जवाब देने के लिए समान है, लेकिन इस तरह से किया जाता है:

Property(x => x.MyVarcharMaxProperty) 
    .HasColumnType("nvarchar(max)"); 
संबंधित मुद्दे