2011-03-13 15 views
6

मुझे अपने लिंक से SQL कक्षाओं को नियमित रूप से रीफ्रेश करने की आवश्यकता है; हां, मेरे डेटा स्कीमा के बारे में सोचने के लिए मुझ पर शर्मिंदगी पर्याप्त रूप से पर्याप्त, खराब डेवलपर, विज्ञापन मतली। मैंने पाया कि SQLMetal लगभग चाल करता है, लेकिन शायद मुझे पैरामीटर सूची से कुछ याद आ रहा है।एसक्यूएलमैटल कक्षाएं उत्पन्न करता है लेकिन पैरामीटर रहित कन्स्ट्रक्टर नहीं

जब मैं अपने चमकदार नया उपकरण पट्टी दृश्य स्टूडियो बाहरी उपकरण का उपयोग कर बटन से मेरे बैच फ़ाइल चलाने के लिए,

@echo off 
del c:\path\to\LinqToSql.dbml 
SQLMetal.exe /server:SERVER\SQLSERVER /database:db /timeout:0 /dbml:"c:\path\to\LinqToSql.dbml" /namespace:DAL /context:DataDataContext /entitybase:System.Data.Linq.DataContext /language:csharp /pluralize 

SqlMetal .dbml फ़ाइल, हुर्रे उत्पन्न करता है। हालांकि, प्रश्न 1 क्या मैं प्रोग्रामिंग में अपनी परियोजना में .dbml फ़ाइल शामिल कर सकता हूं?

प्रश्न 2

क्यों, जब मैं के बाद मैन्युअल रूप से नई जनरेट .dbml फ़ाइल सहित संकलन, मेरी वर्गों में से प्रत्येक के पास उनकी parameterless निर्माताओं की लाइन नंबर के साथ जुड़े त्रुटियों का निर्माण निम्नलिखित? जैसे 30 टेबल = 30 बिल्ड त्रुटियां।

'System.Data.Linq.DataContext' does not contain a constructor that takes 0 arguments 

वास्तविक

मैं नोटिस मेरी DataDataContext उत्पन्न वर्ग एक parameterless निर्माता के बिना है, इसलिए मैं के पूरक के लिए एक आंशिक वर्ग जोड़ा है, लेकिन यह अभी भी चाल नहीं करता है से किया था।

public partial class DataDataContext 
{ 
    public DataDataContext() : 
     base(global::DAL.Properties.Settings.Default.MyConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 
} 

मुझे लगा कि यह ताज़ा प्रक्रिया स्वचालित किया जा करने में सक्षम होगा, लेकिन मानवीय रूप से उत्पन्न .dbml फ़ाइल है कि मेरे लिए काम नहीं कर रहा है इन निर्माता त्रुटियों का उत्पादन जोड़ने।

+0

जोड़ा गया बक्षीस। मैंने मुद्दों के बिना ओपी डिजाइनर का उपयोग किया है, लेकिन एसक्यूएल कॉम्पैक्ट के साथ काम कर रहा है, और एसक्यूएलमैटल के माध्यम से जा रहा हूं, मुझे लगता है कि हम में से कई जानना चाहते हैं कि पैरामीटर-कम कन्स्ट्रक्टर कैसे उत्पन्न करें। – aevanko

उत्तर

0

मैं पैरामीटर रहित कन्स्ट्रक्टर बनाने के लिए आंशिक वर्ग का उपयोग करता हूं (जैसा कि आप करते हैं) और कोई समस्या नहीं है।

सावधान रहें कि आप DAL नामस्थान में DataDataContext बना रहे हैं। (जो उपरोक्त आपके कोड में गायब है)

namespace DAL { 
    public partial class DataDataContext 
    { 
     public DataDataContext() : 
      base(global::DAL.Properties.Settings.Default.MyConnectionString, mappingSource) 
     { 
      OnCreated(); 
     } 
    } 
} 
0

1) क्या आपको वास्तव में .dbml फ़ाइल की आवश्यकता है? हो सकता है आप कुछ इस तरह के साथ सीधे आवश्यक ORM फ़ाइल उत्पन्न कर सकता है (और यह अपने समाधान करने के लिए शामिल है):

SQLMetal.exe /server:SERVER\SQLSERVER /database:DB /namespace:DAL /code:YourDatamapClass.cs /language:csharp 

तब बैच फ़ाइल (समाधान फ़ोल्डर में शायद अपनी सही जगह पर अब ताजा वर्ग ले जाने के लिए)।

2) क्या आपको वास्तव में पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता है? उदाहरण के लिए, अपने कॉन्फ़िग फ़ाइल को डीबी कनेक्शन स्ट्रिंग डाल दिया और इसके साथ नक्शाकार वस्तु बनाने:

//GetConnectionString (not included here) gets the connection string from config 
DB context = new DB(GetConnectionString()); 
3

संक्षिप्त उत्तर है कि SQLMetal parameterless कंस्ट्रक्टर्स ऐसा नहीं करता है।

namespace DAL { 
    public partial class DataDataContext 
    { 
     public DataDataContext() : 
      this(/* Get your connection string here */) 
     { 
      OnCreated(); 
     } 
    } 
} 

ब्याज की अंक:: जवाब के बाकी है कि आपके आंशिक वर्ग काम करना चाहिए, लेकिन यह इस तरह दिखना चाहिए है

  • कॉल इस (स्ट्रिंग) के बजाय निर्माता आधार इतना है कि
    यदि आप चुनते हैं तो ऑनक्रेटेड ईवेंट को सही तरीके से तारित किया जा सकता है।
  • तथापि कनेक्शन स्ट्रिंग प्राप्त करें आप चाहते हैं - एक सरल तरीका

    ConfigurationManager.ConnectionStrings होगा [ "MyConnectionSTring"] connectionstring

app.config में निम्नलिखित के साथ संयुक्त:

<connectionStrings> 
    <add 
     name="MyConnectionSTring" 
     connectionString="Data Source=SQLServerName\instance;Initial Catalog=DatabaseName;Persist Security Info=True;User ID=user" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+0

धन्यवाद आदमी, यह सब मुझे जरूरी है, एसक्यूएलमैटल को कैसे सेट अप करना है, केवल एप/वेब.कॉन्फिग से कनेक्शन स्ट्रिंग को पूरा करने के लिए ओवरराइड कन्स्ट्रक्टर की आवश्यकता है ताकि इसे पूरे समय कन्स्ट्रक्टर में डालने की स्थिति में रखा जा सके। – Pierre

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

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