1

LINQ-to-SQLまたはEntityFrameworkを使用する場合、CRUDの基本を処理するテーブルごとにクラスを簡単に生成できます。

Info info = new Info();
info.Title = "testing";
db.Infos.InsertOnSubmit(info);
db.SubmitChanges();

また、データベーステーブルに構造的な変更を加えると、テーブルのモデルクラスを簡単に再生成できます(デザイナでテーブルを削除し、テーブルをデザイナに再度ドラッグするだけです)。ただし、これはもちろん、クラスにあったすべてのものを上書きします。

したがって、モデルを再生成するときに削除されない機能を各クラスに追加するために、テーブルごとに追加のモデルクラスがあることに気付きます。したがって、 2つのデータレイヤーが有効になります。

これは一般的な方法ですか、それともクラスの再生成時に上書きされない機能を生成されたクラスに追加する方法はありますか?

4

2 に答える 2

6

同じ名前の部分クラスを (別のソース コード ファイルに)作成し、そこに必要な拡張機能を配置します。

于 2009-11-03T08:40:33.847 に答える
2

説明通り?いいえ、ちがいます。

部分クラスを使用して機能を追加することで、この問題に対処します。部分クラスは別のファイルに保存されるため、デザイナーでクラスを削除して再作成すると、コードが残り、魔法のようにアタッチされます。

したがって、モデルがある場合:

MyDataClasses.dbml

次のファイルがあります。

MyDataClasses.dbml.layout
MyDataClasses.designer.cs

次のファイルを追加します (.dbml ファイルで [コードの表示] を実行すると、Visual Studio がこれを実行します)。

MyDataClasses.cs

これで、DataContext を拡張して、データを変更するときの動作を追加できます。

partial void InsertBooking(Booking instance)
{
    instance.LastModified = DateTime.Now;
    if (this.AuditUserID.HasValue)
    {
        instance.LastModifiedByID = this.AuditUserID;
    }

    this.ExecuteDynamicInsert(instance);
}

partial void UpdateBooking(Booking instance)
{
    instance.LastModified = DateTime.Now;
    if (this.AuditUserID.HasValue)
    {
        instance.LastModifiedByID = this.AuditUserID;
    }

    this.ExecuteDynamicUpdate(instance);
}

そして、動作や計算フィールドなどを追加する個々のクラス。ASP.NET 動的データのようなものを使用して、メタデータの注釈とクラスも追加できる場合、これは非常に複雑になる可能性があります。

于 2009-11-03T08:49:13.783 に答える