2010-02-02 12 views
14

मैं अपने DB में एक टेबल CompanyDetails कहा जाता है। इसमें CharacterID varchar(255) नामक कॉलम है। मैं सिर्फ एक NULL स्तंभ के लिए एक NOT NULL स्तंभ से यह बदल दिया है। मैंने मॉडल ब्राउज़र में और साथ ही EDMX फ़ाइल व्यूअर में 'डेटाबेस से अद्यतन मॉडल ...' आदेश चलाया।इकाई फ्रेमवर्क - डेटाबेस से मॉडल अपडेट करें ... - कोई अपडेट नहीं होता है!

[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)] 

मैं भी अगले संपत्ति शामिल है और आप देखेंगे कि इसे सही ढंग से के रूप में चिह्नित किया गया है:

/// <summary> 
/// There are no comments for Property CharacterId in the schema. 
/// </summary> 
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)] 
[global::System.Runtime.Serialization.DataMemberAttribute()] 
public string CharacterId 
{ 
    get 
    { 
     return this._CharacterId; 
    } 
    set 
    { 
     this.OnCharacterIdChanging(value); 
     this.ReportPropertyChanging("CharacterId"); 
     this._CharacterId = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false); 
     this.ReportPropertyChanged("CharacterId"); 
     this.OnCharacterIdChanged(); 
    } 
} 
private string _CharacterId; 
partial void OnCharacterIdChanging(string value); 
partial void OnCharacterIdChanged(); 
/// <summary> 
/// There are no comments for Property URLDomain in the schema. 
/// </summary> 
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()] 
[global::System.Runtime.Serialization.DataMemberAttribute()] 
public string URLDomain 
{ 
    get 
    { 
     return this._URLDomain; 
    } 
    set 
    { 
     this.OnURLDomainChanging(value); 
     this.ReportPropertyChanging("URLDomain"); 
     this._URLDomain = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, true); 
     this.ReportPropertyChanged("URLDomain"); 
     this.OnURLDomainChanged(); 
    } 
} 
private string _URLDomain; 
partial void OnURLDomainChanging(string value); 
partial void OnURLDomainChanged(); 

आप इसे की एक विशेषता है कि ध्यान देंगे: यह क्या यह डिजाइनर में बनाया है:

[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()] 

क्या देता है? मैं अपने डीबी स्कीमा में सरल परिवर्तन कैसे कर सकता हूं और वास्तव में उन परिवर्तनों के आधार पर अपडेट करने के लिए इकाई फ्रेमवर्क प्राप्त कर सकता हूं ?! मुझे हर बार हर बार मॉडल को छोड़ना और फिर से बनाना पड़ा था!

उत्तर

18

इकाई की रूपरेखा डेटाबेस योजना और मानचित्रण निर्दिष्ट करने के लिए एक XML फ़ाइल (edmx) का उपयोग करता है। जब आप "डेटाबेस से मॉडल अपडेट करें" पर क्लिक करते हैं तो यह यह edmx फ़ाइल है जिसे अपडेट किया गया है।

अगला, जब आप अपना ऐप संकलित करते हैं, तो इस एडीएमएक्स फ़ाइल को पार्स किया जाता है और बैकिंग क्लासेस जो आप देख रहे हैं, उत्पन्न होते हैं, इसलिए यदि आप बैकिंग क्लासेस में दिखाई देने वाले परिवर्तन को देखना चाहते हैं तो आपको मॉडल को अपडेट करने की आवश्यकता है, और फिर पुनः संकलित करें।

अंत में, आप भी याद रखना होगा कि edmx 3 चीजें शामिल है।

  1. डेटाबेस/भंडारण योजना (SSDL)
  2. वैचारिक मॉडल (CSDL)
  3. वैचारिक और भंडारण के बीच मानचित्रण (एमएसएल)

डेटाबेस और क्लिक "अद्यतन" अद्यतन कर रहा होगा एसएसडीएल अपडेट करें लेकिन आवश्यक रूप से अवधारणात्मक मॉडल में आवश्यक परिवर्तन नहीं कर पाएंगे, आपको एडीएमएक्स खोलने की आवश्यकता हो सकती है और क्षेत्र में गुणों की जांच कर सकते हैं। (यह पूरी तरह से संभव है कि एक गैर-शून्यणीय वैचारिक क्षेत्र में मैप किए गए एक शून्य डेटाबेस डेटाबेस हो, लेकिन स्पष्ट रूप से इस मामले में जो आप चाहते हैं वह नहीं है)।

+0

+1। यह सही है। यदि आपने पहले ही सीएसडीएल में एक संपत्ति जेनरेट की है, तो आपको इसे मैन्युअल रूप से अपडेट करना होगा। लेकिन एसएसडीएल हमेशा खरोंच से पुनर्जीवित किया जाएगा। ईएफ मानता है कि आप अपने सीएसडीएल अनुकूलन चाहते हैं। –

+4

धन्यवाद क्रेग। एक अतिरिक्त नोट के रूप में, मेरा मानना ​​है कि आप उपकरण edmgen (http://msdn.microsoft.com/en-us/library/bb387165.aspx) स्विच/मोड के साथ उपयोग कर सकते हैं: FromSSDLGeneration या/मोड: FullGeneration की पीढ़ी के लिए मजबूर करने सीएसडीएल + एमएसएल या सभी ब्लॉक, अगर आपको यही चाहिए। –

+0

मुझे इन 3 फाइलें कहां मिलती हैं और क्या मुझे हर बार उन्हें संपादित करना होता है जब मैं इस तरह के बदलाव करता हूं? मैंने अपनी हार्ड ड्राइव पर एक खोज की है और इन फ़ाइलों को बिल्कुल नहीं मिल रहा है इसलिए मुझे आश्चर्य है कि क्या वे आंतरिक रूप से जेनरेट किए गए हैं, और यदि हां, तो मैं उन्हें कैसे खोलूं? (क्या एक नया सवाल है!) :) –

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