c# - डेटाबेस स्कीमा परिवर्तन के बाद LINQ से SQL कक्षाओं को अद्यतन करने का सबसे अच्छा तरीका





.net linq-to-sql (7)


मैंने डीबीएमएल स्क्रिप्ट में स्क्रिप्ट परिवर्तन करने के लिए एक टूल लिखा है http://code.google.com/p/linqtodbmlrunner/ और मेरा ब्लॉग http://www.adverseconditionals.com

मैं एक परियोजना में LINQ से SQL कक्षाओं का उपयोग कर रहा हूं जहां डेटाबेस डिज़ाइन अभी भी कुछ प्रवाह में है।

स्कीमा के साथ कक्षाओं को सिंक्रनाइज़ करने का कोई आसान तरीका है, या यदि तालिका डिज़ाइन में परिवर्तन होता है तो मुझे कक्षाओं को मैन्युअल रूप से अपडेट करने की आवश्यकता है?




डेमियनजी ने कुछ टी 4 टेम्पलेट्स लिखे हैं जो आपके लिए वीएस उत्पन्न करने वाले कुछ चीज़ों को प्रतिस्थापित कर सकते हैं। जब भी आप कमांड लाइन उपकरण के माध्यम से पसंद करते हैं तो इन्हें फिर से चालू किया जा सकता है।

टी 4 टेम्पलेट्स में संपादन योग्य होने का अतिरिक्त लाभ है। यह आपको दिल की सामग्री के लिए उत्पन्न होने वाली चीज़ों को ट्विक करने की अनुमति देता है।




आप अपनी डीबीएमएल और सीएस / वीबी फाइल जेनरेट करने के लिए SQLMetal.exe का उपयोग कर सकते हैं। इसे शुरू करने के लिए प्री-बिल्ड स्क्रिप्ट का उपयोग करें और उस निर्देशिका को लक्षित करें जहां आपका डेटाकॉन्टेक्स्ट प्रोजेक्ट संबंधित है।

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>



मैंने इसे स्वयं नहीं किया है, लेकिन अन्य लोगों द्वारा हुगाटी डीबीएमएल / ईडीएमएक्स उपकरण की सिफारिश की जाती है।

हुगाटी डीबीएमएल / ईडीएमएक्स टूल्स विजुअल स्टूडियो के लिए ऐड-इन है जो विजुअल स्टूडियो 2008 में लिंक 2 एसक्यूएल / डीबीएमएल आरेख डिजाइनर और विजुअल स्टूडियो 2008 एसपी 1 में एडीओ.NET इकाई फ्रेमवर्क डिजाइनर को कार्यक्षमता जोड़ता है। ऐड-इन, LINQ -S-SQL (डीबीएमएल) और ईएफ (ईडीएमएक्स) कक्षाओं और गुणों का नाम बदलने के लिए, LINQ2SQL डिजाइनर आरेखों को डेटाबेस परिवर्तनों के साथ जोड़ने के लिए नए मेनू विकल्प जोड़ता है .नेट नामकरण सम्मेलनों का उपयोग करने के लिए, और लिंकक में दस्तावेज़ / विवरण जोड़ने के लिए डेटाबेस गुणों से एसक्यूएल जेनरेट कक्षाएं।




मुझे लगता है कि जेफ ने हाल ही में इस बारे में शिकायत की है। एक आम तकनीक है कि सभी वस्तुओं को फिर से डिजाइनर में खींचें ...

मुझे उम्मीद है कि कोई और बेहतर दृष्टिकोण के साथ झुकता है!




विजुअल स्टूडियो के भीतर DataContext डिज़ाइन सतह के भीतर इकाई / तालिका की गुणों को संशोधित करने के बारे में कैसे?

उदाहरण के लिए यदि मैंने SQL सर्वर तालिका में कोई कॉलम जोड़ा है:

  1. * .dbml फ़ाइल खोलें।
  2. इकाई पर राइट क्लिक करें और जोड़ें> संपत्ति का चयन करें।
  3. नए कॉलम के लिए प्रॉपर्टी विंडो में मान भरें।
  4. अपना समाधान बनाएं

ऑटो जेनरेट किए गए मॉडल वर्गों को जोड़े गए नए कॉलम को प्रतिबिंबित करना चाहिए।




यदि आप किसी बाध्यकारी झंडे को निर्दिष्ट नहीं करते हैं तो आपको सार्वजनिक, आवृत्ति गुण मिलेगा - जो आप चाहते हैं। लेकिन फिर आपको यह जांचना होगा कि PropertyInfo ऑब्जेक्ट पर PropertyType प्रकार स्ट्रिंग का है या नहीं। जब तक कि आप पहले से नहीं जानते हैं, आपको यह भी जांचना होगा कि संपत्ति पठनीय / लिखने योग्य है जैसे @ फ्रेड्रिक इंगित करता है।

using System.Linq;

public static void ReplaceEmptyStrings<T>(List<T> list, string replacement)
{
    var properties = typeof(T).GetProperties()
                              .Where( p => p.PropertyType == typeof(string) );
    foreach(var p in properties)
    {
        foreach(var item in list)
        {
            if(string.IsNullOrEmpty((string) p.GetValue(item, null)))
                p.SetValue(item, replacement, null);
        }
    }
}




c# .net linq-to-sql