2

LINQ-to-SQL クラスを使用するいくつかの単純な (C#、.Net 4.0) コードがあり、オブジェクトを「拡張」して独自のフィールドを追加しようとしています。LINQ によって生成されたクラスが呼び出され、内部使用のためにいくつかの値DatabaseRowを追加したいとします。bool

public class ExtendedDatabaseRow: DatabaseRow
{
   public bool ReadyToWrite;
   public bool Changed;
}

これはコードでは問題なく機能します。タイプExtendedDatabaseRowなどのオブジェクトを作成できます。ただし、これらのオブジェクトをデータベースに書き戻したいと思います。changedRowオブジェクト(タイプExtendedDatabaseRow) をデータベースに書き戻したいとしましょう:

DataClassesDataContext dc = new DataClassesDataContext();
DatabaseRow newrow = (DatabaseRow) changedRow; // "Cast" the extended object back to the base type
dc.DatabaseRows.InsertOnSubmit(newrow);
dc.SubmitChanges();

これはエラーをスローします

オブジェクト参照がオブジェクト インスタンスに設定されていません。

しようとするときInsertOnSubmit

新しいDatabaseRowオブジェクトを作成し、ソース オブジェクトから各パラメーターをコピーすることもできますが、これは少し面倒です。拡張オブジェクトを基本オブジェクトに単純にキャストできますか?もしそうなら、何が間違っていますか? それとも、私がうまくやっているのですか?エラーはLINQ固有のものですか?

私はまだC#、特に使用される用語に非常に慣れていないため、これがばかげた質問である場合は事前に謝罪してください。

4

2 に答える 2

1

IIRC、LINQ-to-SQL は部分クラスを作成するため、そのように拡張できます。これはおそらく、LINQ-to-SQL クラスを拡張するデフォルトの方法です。

そうは言っても、そこで Null 参照を取得する理由がわかりません。コードをステップ実行して、newrow挿入時に null であるかどうかを確認しましたか?

于 2013-08-08T12:32:16.460 に答える