2013-08-07 4 views
5

इम एक डेटाबेस के लिए एक छोटी सी सेवा उपकरण पर काम कर रहा कास्ट। मेरी समस्या यह है कि आखिरी अपडेट के कारण, कुछ छोटे-रंगों को पूर्णांक में बदला जाना था।इकाई की रूपरेखा कोड पहले - SMALLINT और पूर्णांक int32 को

public class TEST 
{ 
    public int ID { get; set; } 
    //public Int16 ID { get; set; } 
    public string TEST { get; set; } 

} 

मैंने int16 से int के प्रकार को बदल दिया। सब ठीक काम करता है, सिवाय इसके कि मैं इसे डेटाबेस के पुराने संस्करण के साथ अब और उपयोग नहीं कर सकता। अपवाद कुछ है जैसे "System.Int32 अपेक्षित, Typ System.Int16 पाया"।

वहाँ int32 करने के लिए सभी SMALLINT और पूर्णांक कास्ट करने के लिए कोई तरीका है?

कोई भी विचार? मेरे पर्यावरण:

 modelBuilder.Entity<TEST>() 
     .Property(p => p.ID) 
     .HasColumnType("smallint"); 

अपवाद::

त्रुटि 2019: सदस्य मैपिंग निर्दिष्ट है EntityFramework 5.0.0 .NET 4.5 FirebirdClient 3.0.2.0

मैं modelbuilder में डाली के लिए मजबूर करने की कोशिश की मान्य नहीं है। प्रकार 'Edm.Int32 [Nullable = झूठी, तो DefaultValueXML =]' के सदस्य प्रकार 'ContextRepository.TEST' में 'आईडी' के सदस्य की 'FirebirdClient.smallint [Nullable = झूठी, तो DefaultValueXML =, StoreGeneratedPattern = पहचान]' साथ संगत नहीं है प्रकार में 'CodeFirstDatabaseSchema.BUNDLAND'

बनाओ आईडी int16 'SCHLUESSEL' और फिर smallint को (HasColumnType ("पूर्णांक")) सब कुछ कास्टिंग ठीक काम करता है, लेकिन मुझे बड़ा संख्या 31,767 (sMALLINT अधिकतम) की तुलना में साथ अपवाद देना होगा ...

+0

आप डेटाबेस इस स्तंभ के लिए पूर्णांक उपयोग करने के लिए अपग्रेड क्यों नहीं कर सकते? –

+0

मैं केवल एक रखरखाव कार्यक्रम लिख रहा हूं और मुख्य अनुप्रयोग में साइड इफेक्ट्स के बारे में चिंताओं का सामना कर रहा हूं ... – Dust258

उत्तर

7

मैं मेरी समस्या के लिए एक समाधान मिल गया!

:

public class TEST 
{ 
    public Int16 ID { get; set; } 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<TEST>().HasKey(a => new { a.ID}); 
    modelBuilder.Entity<TEST>() 
    .Property(p => p.ID) 
    .HasColumnType("SMALLINT"); 
    base.OnModelCreating(modelBuilder); 
} 

अब मैं अपवाद (यहां तक ​​कि संख्या> 32767) के साथ के बिना संपत्ति int पर कास्ट कर सकते: मैं smallint करने के लिए अपने मॉडल में int16 का उपयोग करें और colum प्रकार सेट करने के लिए modelbuilder उपयोग करने के लिए

var lQry = (from b in ctData.TEST 
    select new 
    { 
     ID = (int)b.ID, 
    }); 
+0

मुझे समझ में नहीं आता कि यह कैसे संकलित करता है? आपके पास एक ही नाम के साथ दो गुण हैं। – michaelmsm89

+1

अप, अब यह तय हो गई – Dust258

+0

आप की जरूरत HasColumnType करते हैं ("SMALLINT")? Int16 घोषित नहीं है? –

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