2011-03-13 15 views
6

Linq To SQL sınıflarımı düzenli olarak yenilemem gerekir; Evet, veri şemamı yeterince düşünemediğim için üzülüyorum, kötü geliştirici, reklam nauseum. SQLMetal'in neredeyse hile yaptığını buldum, ama belki de parametre listesinden bir şey özlüyorum. SQLMetal, sınıflar oluşturur, ancak parametresiz yapıcılar değil

Ben Visual Studio Harici Araçlarını kullanarak benim parlak yeni bir araç çubuğu düğmesinden benim toplu dosyasını çalıştırın

,

@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 yaşasın, .dbml dosyası oluşturur. Ancak, Soru 1 Programlamam .dbml dosyasını projeme programlı olarak ekleyebilir miyim?

Soru 2

Neden, tanıyorum, sonra elle yeni oluşturulan .dbml dosyasını içeren derleme yaparken benim sınıfların her biri kendi parametresiz inşaatçı hat numarasıyla ilişkili yapı hatalarını aşağıdaki? Örneğin. 30 tablo = 30 yapı hatası.

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

benim DataDataContext oluşturulan sınıf bir parametresiz oluşturucu olmadan olduğunu fark, bu yüzden ek kısmi sınıfını ekledi, ama yine de hile yapmaz did fiili

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

Bu yenileme işlemi otomatik hale edebilmek, ancak elle benim için çalışmıyor bu yapıcı hataları üretir oluşturulan .dbml dosyası ekleyerek düşündüm.

+0

Eklenen ödül. OP Designer'ı sorun yaşamadan kullandım, ancak SQL Compact ile çalışıp SQLMetal'i geçtim, çoğumuz parametresiz bir kurucunun nasıl üretileceğini bilmek istiyoruz. – aevanko

cevap

0

Parametless yapıcıyı (yaptığınız gibi) oluşturmak için kısmi bir sınıf kullanıyorum ve herhangi bir sorunla karşılaşmadım.

DAL ad alanında DataDataContext oluşturduğunuzu unutmayın. (yukarıdaki kodunuzda eksik)

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

1) Gerçekten .dbml dosyasına ihtiyacınız var mı? Belki doğrudan böyle bir şey ile gerekli ORM dosyası oluşturmak (ve sizin çözüm dahil olması) olabilir:

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

Ardından toplu iş dosyası muhtemelen çözüm klasörüne (onun doğru yere şimdi tazelenmiş sınıf hareket yapmak).

2) Gerçekten parametresiz bir kurucuya ihtiyacınız var mı? Örneğin, yapılandırma dosyasına DB bağlantı dizesini koymak ve onunla mapper nesne oluşturmak:

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

Kısa cevap SQLMetal parametresiz kurucular yapmaz olmasıdır. ilgi

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

puanlar: cevabın kalan kısmi sınıf çalışması gerekir, ama böyle bakmak gerektiğidir

  • Çağrı böylece bu (string) yapıcısı yerine baz
    OnCreated olay, eğer seçerseniz doğru şekilde bağlanabilir.
  • istediğiniz gibi bağlantı dizesini al - basit bir şekilde

    ConfigurationManager.ConnectionStrings olurdu [ "myConnectionString"]

app.config aşağıdaki kombine ConnectionString:

.
<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

Teşekkürler, tüm ihtiyacım olan şey, SQLMetal'i nasıl kuracağınızı biliyoruz, sadece bağlantı dizesini uygulama/web.config dosyasından çıkarmak için bir override yapıcıya ihtiyaç duydu. – Pierre

İlgili konular