3

これらのEntity FrameworkのプロパティをSQL Serverの計算列に変換したいと思います。出来ますか?指定された他のすべてのプロパティはテーブルフィールドです。 さらに、コードファーストを使用していることを考慮して、モデル内で計算された列をどのように指定する必要がありますか?EFプロパティをSQL Serverの計算列に変換する方法は?

public enum Severity : int { INTIME = 0, B = 1, M = 2, A = 3, TIMEOUT = 4 }; 
public enum StatiTT : int { ND_INT = 1, ND_REP = 2, INT = 3, DI = 4, CH = 5, RV = 6, AN = 7 }; 
private const float TRESH_B = (float)0.5; 
private const float TRESH_M = (float)0.3; 
private const float TRESH_A = (float)0.2; 

A)

public int MinutiAllaScadenza 
    { 
     get 
     { 
      int mm = 0; 
      DateTime Ora = DateTime.Now; 

      mm = (DataObiettivo - Ora).Days*1440 + (DataObiettivo - Ora).Hours * 60 + (DataObiettivo - Ora).Minutes; 

      if (StatoTicketID > (int)StatiTT.DI && mm < 0) mm = 10000000; 

      return mm; 
     } 
    } 

B)

public int Sev 
    { 
     get 
     { 
      int sev = 0; 
      float perctres = PercentualeTempoResiduo; 

      if (StatoTicketID < (int)StatiTT.CH) 
      { 
       if (MinutiAllaScadenza < 0) { sev = (int)Severity.TIMEOUT; return sev; } 
       if (perctres < TRESH_A) { sev = (int)Severity.A; return sev; } 
       if (perctres < TRESH_M) { sev = (int)Severity.M; return sev; } 
       if (perctres < TRESH_B) { sev = (int)Severity.B; return sev; } 
      } 
      return sev; 
     } 
    } 

C)

public float PercentualeTempoResiduo 
    { 
     get 
     { 

      if (StatoTicketID > (int)StatiTT.DI) return 999; 

      float perc = 0; 
      float mm2scad = (float)MinutiAllaScadenza; 
      float mmtot = (float)TempoTotaleInizio_Obiettivo; 

      if (MinutiAllaScadenza > 0) 

       perc = (float)1 - (mmtot-mm2scad)/mmtot; 

      return perc; 
     } 
    } 

D)

public string Alert 
    { 
     get 
     { 
      string alert = ""; 
      float perctres = PercentualeTempoResiduo; 

      if (StatoTicketID < (int)StatiTT.CH) { 
       if (perctres < TRESH_A) { alert = "A"; return alert; } 
       if (perctres < TRESH_M) { alert = "M"; return alert; } 
       if (perctres < TRESH_B) { alert = "B"; return alert; } 
      } 
      return alert; 
     } 
    } 

ありがとうございます!

答えて

1

あなたの主な質問に対する答えははいです。これらのC#ルーチンを計算カラムに変換することができます。しかし、1つの条件があります。結果を計算するのに必要な関連情報は、テーブル自体に存在する必要があります。あなたのアラートプロパティのために

、ここにあなたの計算列がどのように見えるかです:

alter table <TBLNAME> add <COLNAME> AS (
    case 
    when StatoTicketID < (int)StatiTT.CH AND perctres < .2 then 'A' 
    when StatoTicketID < (int)StatiTT.CH AND perctres < .3 then 'M' 
    when StatoTicketID < (int)StatiTT.CH AND perctres < .5 then 'B' 
    else '' 
    end) 

をあなたの計算された結果は、他のテーブルからの情報を使用する必要がある場合は、読んで、その後、平野EFのオブジェクトを使用するためのビューにEFを結合考えますあなたの書き込み操作のために。

最初に、C#で計算カラムを書き込むことはできません。また、EFからSQLServer計算カラムに変換することはできません。最初にモデルを作成した後、計算された列をDBに書き込んでから、元に戻ってEFオブジェクトに配線します。

+0

貴重なご回答をいただきありがとうございます。 残念ながら、私は初心者であり、SQL Serverの可能性を今発見し始めています。他のプロパティをトランスコードすることもできますか、日付を扱うためのドキュメントはどこにありますか教えてください。あなたの答えは、私のように初心者でもある多くの人にとって貴重なものになると思います。 さらに、計算された列を他の計算された列に基づいて作成することは可能でしょうか?私はPERSISTENT節を使うべきですか? ありがとうございます! 最高のおじいさん – Larry

+0

私の質問に記載されているすべてのプロパティの計算列を作成しようとしています...問題は、計算された列を他の計算に基づいて作成できないということです。いくつかの関数を作り、異なる計算列の中でそれらを使うことができます。誰かが私に "** C **"プロパティの関数を作成するか、より良い方法を提案してくれますか?ありがとうございました! – Larry

+0

私は関数を計算カラムと組み合わせて作業することに成功しました。あなたの貴重な情報を@sisdogありがとう! – Larry

関連する問題