1

他のいくつかの質問で述べたように、私は現在、データベースでサポートできるようになったため、自家製のORMをEntityFrameworkに置き換えようとしています。

現在、内部データベースのテーブルとWebサイトを実行するデータベースのテーブルにマップされるように特定のオブジェクトが設定されています(同じサーバー上ではもちろん、同じ状態でもありません)。したがって、たとえば:

Part p = new Part(12345);
p.Name = "Renamed part";
p.Update();

ID 12345のパーツの名前が「名前変更されたパーツ」になったことを反映して、内部データベースとWebデータベースの両方を同時に更新します。このロジックは、当面は一方向(内部->ウェブ)に進む必要があります。LINQ-to-SQLDBMLとそのオブジェクトを介してWebデータベースにアクセスします。

私の質問は2つの部分に分かれていると思いますが、そもそも正しい質問をしていない可能性があります。

  1. 「これをWebにプッシュする必要がありますか?」の検証をトリガーするために使用できる「OnUpdate()」イベント/メソッドの種類はありますか?そして、プッシュしますか?デフォルトで何も存在しない場合.SaveChanges()、データベースに到達するまでの間にロジックを挿入する他の方法はありますか?
  2. どのDBMLオブジェクトにマップするか、およびEF自動生成プロパティごとに、L2Sオブジェクトのどのプロパティにマップするかを指定する方法はありますか?名前はよく一致しますが、必ずしもそうとは限らないので、私はそれに頼ることができません。または、L2Sオブジェクトを一般的な方法で変更して、EFオブジェクトからデータを取り込むことができるようにすることはできますか?
4

3 に答える 3

0

質問2で言っているように、2つを相互接続する必要はありません。独自のEFまたはL2Sモデルを備えた2つの別個のデータベースを用意し、ドメインオブジェクトを含むリポジトリを使用してそれらを抽象化します。

于 2012-06-16T14:31:00.877 に答える
0

SQLServerレプリケーションの仕事のように聞こえます。

于 2012-06-15T21:56:52.793 に答える
0

これは私が最終的に行った解決策です。の実装はIAdvantageWebTable既存の基本クラスから継承されるため、T4テンプレートが正しく継承されるように変更された後は、EFベースのクラスに対して特別なことを行う必要はありません。

public partial class EntityContext
{
    public override int SaveChanges(System.Data.Objects.SaveOptions options)
    {
        var modified = this.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added); // Get the list of things to update
        var result = base.SaveChanges(options); // Call the base SaveChanges, which clears that list.
        using (var context = new WebDataContext()) // This is the second database context.
        {
            foreach (var obj in modified)
            {
                var table = obj.Entity as IAdvantageWebTable;
                if (table != null)
                {
                    table.UpdateWeb(context); // This is IAdvantageWebTable.UpdateWeb(), which calls all the existing logic I've had in place for years.
                }
            }
            context.SubmitChanges();
        }
        return result;
    }
}
于 2012-08-08T23:20:12.933 に答える