[解決済み] EF Code Firstの計算カラム
2023-02-16 14:04:32
質問
データベースで、(行の合計) - (行の合計) としてデータベースによって計算される1つの列を持つ必要があります。私は私のデータベースを作成するためにコードファーストモデルを使用しています。
以下は私が言いたいことです。
public class Income {
[Key]
public int UserID { get; set; }
public double inSum { get; set; }
}
public class Outcome {
[Key]
public int UserID { get; set; }
public double outSum { get; set; }
}
public class FirstTable {
[Key]
public int UserID { get; set; }
public double Sum { get; set; }
// This needs to be calculated by DB as
// ( Select sum(inSum) FROM Income WHERE UserID = this.UserID)
// - (Select sum(outSum) FROM Outcome WHERE UserID = this.UserID)
}
EF CodeFirstで実現するにはどうしたらよいでしょうか?
どのように解決するのですか?
あなたが作成することができます
計算されたカラム
を作成できます。EF モデルでは、対応するプロパティを
DatabaseGenerated
属性でアノテーションします。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public double Summ { get; private set; }
あるいはフルエントマッピングで
modelBuilder.Entity<Income>().Property(t => t.Summ)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)
によって提案されたように
マティヤ・グルチッチ
とコメントで提案されているように、プロパティを
private set
というのは、アプリケーションコードでそれを設定したいことはおそらく決してないからです。Entity Frameworkは、プライベートなセッターに問題はありません。
注意してください。 EF .NET Coreの場合は、以下のように ValueGeneratedOnAddOrUpdateを使用する必要があります。 のように、HasDatabaseGeneratedOptionが存在しないので、例えば、以下のようにします。
modelBuilder.Entity<Income>().Property(t => t.Summ)
.ValueGeneratedOnAddOrUpdate()
関連
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] 最初の行への結合方法
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] EF Code First "Invalid column name 'Discriminator'" but no inheritance.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。