2

Linq To Sqlによって生成されたクラスを拡張して、新しいオブジェクト(= row)が作成されたときに初期化したいと思います。

親行が作成されたときに子テーブルに行を追加したい。

Oncreated(部分)メソッドを使用して次のようなことをしたいと思っていました。

partial class Product {
    partial void OnCreated() {
        // Fill default rows for FK relations
        this.Columns.Add(new ProductColumn {
            Name = "Name", ColumnType = 1
        });
        this.Columns.Add(new ProductColumn {
            Name = "Producer", ColumnType = 2
        });
    }
}

OnCreatedは、コンストラクターから毎回呼び出されます。したがって、OnCreatedの呼び出し後にオブジェクトがデータベースからロードされる場合も同様です。また、オブジェクトがデータベースからロードされている場合は、コードを実行しないでください。

では、オブジェクト(-graph)を初期化するために、モデルにロジックをどこに追加できますか?

4

4 に答える 4

2

LINQ-to-SQL を使用すると、エンティティは親データ コンテキストをほとんどEntitySet<T>認識しません。この詳細を知っているのは、遅延読み込みされたメンバーだけです。(延期されていると仮定して).IsDeferred調べることで、データ コンテキストに対応したエンティティ セットを特定できます。

  • LINQ-to-SQLは、コンストラクター (および) が実行された後に、データ コンテキストを (遅延実行用に) アタッチします。OnCreated
  • OnCreated/に項目を手動で追加する.ctor()と、LINQ-to-SQL がデータ コンテキストをアタッチしようとすると中断します
  • LINQ-to-SQL は既定のコンストラクターを使用します。つまり、generics/new()などもこのコードを共有します。

残念ながら; OnCreatedいいえ、賢明な方法でこれを行うことはできないと思います。あなたは出来る:

  • この使用のために、余分なアイテムを追加する2番目のコンストラクターがあります
  • ファクトリ メソッド、つまり.Create()アイテムを正しく構築する静的メソッドを使用する

(LINQ-to-SQL は上記のいずれも使用しないため)

于 2009-03-31T08:26:01.200 に答える
1

このインスタンスでは、ファクトリを使用してインスタンスを作成する方がよいと思います。したがって、現在のどこにでも次のようなコードがあります。

Product p = new Product();

代わりに次のようになります。

Product p = ProductFactory.CreateProduct();

CreateProduct() メソッドは次のようになります。

public Product CreateProduct()
{
    var p = new Product();
    p.Columns.Add(new ProductColumn {
        Name = "Name", ColumnType = 1
    });
    p.Columns.Add(new ProductColumn {
        Name = "Producer", ColumnType = 2
    });
    return p;
}
于 2009-03-30T14:58:15.993 に答える
0

If you are using the designer -- and I presume you are because you are using partial classes -- you can add the association in the designer and the appropriate columns will get added to your object automatically. MSDN has a reference on how to create associations using the designer work surface.

于 2009-03-27T10:45:51.773 に答える