2009-07-21 12 views
0

LinqToSqlに2つのサブクラスを持つ低音クラスを作成しました。サブクラスのカスタム更新メソッドのそれぞれに異なるストアドプロシージャを割り当てる必要があります。これは問題ありませんが、「無効なオブジェクト名 'xxx'」というエラーが表示されます。LinqToSqlの継承サブクラスのカスタムInsert/Update/Deleteメソッドの設定方法を教えてください。

DataClasses1DataContext dc = new DataClasses1DataContext(); 
Class2 c2 = new Class2() { ID = 1, Name = "test", Type = "s" }; 
dc.Class1s.InsertOnSubmit(c2); 
dc.SubmitChanges(); 

...クラス2はクラス1とクラス2は(私はそれを実行したいものである)、それ独自のカスタムINSERTメソッドを持って継承しています。

ありがとうございました。

解決策:ブライアンの答えは、私が何をしたのかを私に与えました。ここで私はデザイナーの背後にあるクラスに追加されたコードは次のとおりです。

partial class DataClasses1DataContext 
{ 
    partial void InsertClass1(Class1 instance) 
    { 
     instance.Insert(this); 
    } 
} 

partial class Class1 
{ 
    public abstract void Insert(DataClasses1DataContext dataContext); 
} 

partial class Class2 
{ 
    public override void Insert(DataClasses1DataContext dataContext) 
    { 
     dataContext.InsertSP(((System.Nullable<int>)(ID)), Name); 
    } 

} 

partial class Class3 
{ 
    public override void Insert(DataClasses1DataContext dataContext) 
    { 
     dataContext.InsertSP2((System.Nullable<int>)(ID), Name); 
    } 
} 

InsertSPとInsertSP2保存されprocsのは、私に手動でSPを呼び出すために持つの手間を節約するために、デザイナーを使用してドラッグしました。 THIS ONE

答えて

2

FOR BRYAN TO

すべてのクレジットこれはLINQ to SQLデザイナで生成されますどのような場合には:

partial void InsertClass1(Class1 instance); 

とあなたがpartialクラスの実装があります。

partial void InsertClass1(Class1 instance) 
{ 
    ...call stored procedure... 
} 

代わりに、その操作を表すClass1に仮想メソッドを持つことができます:

protected virtual void Insert(Class1 instance) 
{ 
    ...call stored procedure... 
} 

Class1partial方法からそれを呼び出す:

partial void InsertClass1(Class1 instance) 
{ 
    Insert(instance); 
} 

Class2でそれをオーバーライドします。

protected override void Insert(Class1 instance) 
{ 
    ...call different stored procedure... 
} 

唯一の難点は、あなたがClass2にキャストしなければならないということですオーバーライドされたメソッドですが、常に成功します。

+0

私は、SubmitChangesが呼び出されたときに実行するspを指定するために使用できるORMデザイナと挿入/更新/削除メソッドを参照しています。私はあなたが言っていることは、基本的にはSubmitChangesのアプローチをやめ、私自身の挿入メソッドを書くことだと思います。はい、これは問題ありませんが、ORMを使用する目的を壊してしまい、自動生成器に任せずに自分のメソッドを維持する必要があります。私が本当に望んだことは、サブクラスのORMに挿入メソッドを設定することは、ヒラキラを有効にすることですが、そうは見えません。しかし、ありがとう。 – HAdes

+0

それは私が意味するものではありません。 InsertOnSubmitとSubmitChangesの呼び出しコードはまったく同じです。私は、Class1エンティティでデザイナの制限を回避するための新しいメソッドを提案しています。依然としてエンティティ内に完全にカプセル化されます。私はあなたがそれを持っている方法で働くだけでなく、それについての不満を理解しています。 –

+0

申し訳ありませんが、自分のワイヤーが交差していると思います。私はあなたの解決策をもう一度見て、一度私は突然クリックして取得していたものを理解した。だから私はデザイナーに頼る必要はなく、datacontextの部分クラスを使用するだけで(私もそれを行うことはできませんでした)。私は自分の投稿に加えたことを追加します。私はLinqToSqlとLinqToEntitiesを将来使用するように推し進めているので、多くの感謝のブライアンは私にベーコンを保存しました。 – HAdes

関連する問題