2011-10-27 19 views
1

Linq-to-SQLを使用して、デザイナにドラッグされたデータベーステーブルのクラスを生成します。私はデザイナーにProductテーブルをドラッグすると、Visual Studioは、このように生成されます:Linq-to-SQLでは間違ったコードが生成されますが、コンパイル時にエラーはありません

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Products")] 
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged 
{ 
    // ... 
    partial void OnProductIDChanging(int value); 
    partial void OnProductIDChanged(); 

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProductID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 
    public int ProductID 
    { 
     get 
     { 
      return this._ProductID; 
     } 
     set 
     { 
      if ((this._ProductID != value)) 
      { 
       this.OnProductIDChanging(value); 
       this.SendPropertyChanging(); 
       this._ProductID = value; 
       this.SendPropertyChanged("ProductID"); 
       this.OnProductIDChanged(); 
      } 
     } 
    } 
    //... 
} 

OnProductIDChangingOnProductIDChanged抽象メソッドではなく、彼らは空になっているが、なぜ彼らは、エラーをコンパイル与えることはありません。ありがとう。

+0

どういう意味ですか?コンパイラが空のメソッドでエラーを引き起こすのはなぜですか? –

答えて

2

これらは部分的な方法であるためです。

This articleは、部分的な方法の非常に良い説明があります。

3

partial methodsです。 MSDNより:

クラスの一部に、メソッドのシグネチャが含まれています。 オプションの実装は、同じ部品または別の部品に定義することができます。 部品。実装が提供されていない場合、メソッドとメソッドのすべての は、コンパイル時に削除されます。

+0

+1これらの部分的なメソッドは**完全に有効です** C#コード! –

関連する問題