c# मैं एएसपीनेट ईएफ कोडफर्स्ट डेटा एनोटेशन का उपयोग कर वर्चर्स(अधिकतम) में SQL सर्वर में एक कॉलम कैसे सेट करूं?




sql-server entity-framework (4)

मैं एंटीटी फ्रेमवर्क कोड रखने के लिए सही वाक्यविन्यास को समझने की कोशिश कर रहे वेब के चारों ओर खोज कर रहा हूं, पहले कॉलम के साथ मेरी तालिका बनाएं: वर्कर (अधिकतम)।

यह वही है जो मेरे पास है। डिफ़ॉल्ट रूप से यह वर्चर (128) बनाता है। मैं वर्कर (अधिकतम) कैसे बना सकता हूं?

मैंने सफलता के बिना [अधिकतम लम्बाई] कोशिश की है।

किसी भी सहायता की सराहना की जाएगी। धन्यवाद!

[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }

[Column(TypeName = "varchar(MAX)")]

आश्चर्यजनक रूप से सबसे स्पष्ट समाधान काम करता है।

[MaxLength] अधिकतम लम्बाई [MaxLength] विशेषता केवल अधिकतम लंबाई वाले [MaxLength] कॉलम बनाती है जो MAX नहीं है लेकिन - मेरे मामले में (SQL सर्वर एक्सप्रेस 2008 आर 2) - 8000।


यह आपको nvarchar(max) मिलेगा:

[StringLength(int.MaxValue)]

मुझे नहीं लगता कि गैर-यूनिकोड को मजबूर करने के लिए एक विशेषता है (क्या आप वाकई इसे चाहते हैं?), इसलिए वर्कर varchar(max) आपको डीबीकॉन्टेक्स्ट में ट्विक की आवश्यकता है:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}

@ स्लुमा उत्तर के लिए अद्यतन करें।

OnModelCreating में इस तरह के सभी तारों के लिए ओवरराइड का उपयोग करना:

modelBuilder.Properties<string>().Configure(s => 
    s.HasMaxLength(256).HasColumnType("nvarchar"));

और उसके बाद गुणों के साथ गुणों को संशोधित करना:

[Column(TypeName = "nvarchar(MAX)")]
public string CaseComment { get; set; }

या यह:

modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)");

यह अपवाद का कारण बन सकता है। Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. भले ही कॉलम सही डेटा प्रकार का है, एंटीटी फ्रेमवर्क अभी भी सोचता है कि यह nvarchar(256) और त्रुटि DbEntityValidationException फेंकता है।

इसे ठीक करने के लिए निम्न का उपयोग करें:

[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string CaseComment { get; set; }

या

modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)")
    .HasMaxLength(null);

[अधिकतम लम्बाई] एनोटेशन का प्रयोग करें।

[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }




ef-code-first