0

独自のテーブルの他の要素を使用できる計算されたプロパティを最初に EF コードで作成することは可能ですか?

いいえの場合、コンテキストメソッドを使用せずにそれを行う最良の方法は何ですか (コンバーターを使用せずに wpf UI にバインドするプロパティが必要です)?

この例は、私がやろうとしていることを示しています (計算された SQL フィールドで静かに簡単に実行できます):

class MyEntity{

public virtual decimal Amount { get; set; }

public virtual decimal DivideOfThisAmountOnAll
{
    get
      {
        var sum = *******.sum(e=>e.Amount); //How am i supposed to acces to the others?
        return this.Amount / sum;
      }
 }

}
4

3 に答える 3

2

データベース オブジェクトを直接変更する代わりに、バインド用のビジネス ロジック層を作成することをお勧めします。https://github.com/AutoMapper/AutoMapperのようなツールを使用すると、ほとんどのテーブル エンティティを変更せずに簡単に転送し、集計値、複雑な計算フィールド、その他の非保存データ タスクの作成などを行うことができます。

MVC では、これは Model、View、ViewModel、Controller と呼ばれます。ここで、ViewModel はバインド先であり、すべての計算結果があります。

これにより複雑さが増しますが、Model オブジェクトをそのままにし (これは良いことです)、ルールを 1 つの場所 (ViewModel) に分離できるため、同じ計算が多くのコントローラーに分散することを回避できます (アンチパターン)。

于 2013-03-06T18:11:33.457 に答える
1

これは、db コンテキストにアクセスしないと実行できません。エンティティなどに注入するスキームを考え出すこともできますが、基本的には、他のクエリと同じように db コンテキストをクエリします。

class MyEntity{
  public virtual decimal Amount { get; set; }

  public virtual decimal DivideOfThisAmountOnAll(YourDbContext db)
  {  
        var sum = db.LinqQueryHereToAggregateAsYouPlease.Single();
        return this.Amount / sum;
  }

}
于 2013-03-06T18:13:13.873 に答える
1

これを行うには、ナビゲーション プロパティをお勧めします。

class MyEntity{

    public virtual decimal Amount { get; set; }

    public virtual Parent Parent { get; set; }

    public virtual decimal DivideOfThisAmountOnAll
    {
        get
        {
            var sum = Parent.MyEntities.Sum(e=> e.Amount);
            return this.Amount / sum;
        }
    }

}

AaronLS の回答も問題なく機能しますが、DbContext への依存関係が発生します (そのようなことを気にする場合)。

于 2013-03-06T22:30:07.637 に答える