gpt4 book ai didi

c# - 如何将 EF 属性转换为 SQL Server 的计算列?

转载 作者:行者123 更新时间:2023-11-30 18:01:19 25 4
gpt4 key购买 nike

我想将这些 Entity Framework 的属性转换为 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;

一个)

 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;
}
}

非常感谢!

最佳答案

您的主要问题的答案是肯定的,这些 C# 例程可以转换为计算列。但有一个条件:计算结果所需的相关信息必须在表本身中找到。

对于您的 Alert 属性,计算列的外观如下:

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 绑定(bind)到 View 以进行读取,然后使用纯 EF 对象进行写入操作。

至于代码优先,您不能在 C# 中编写计算列并期望 EF 为您将其转换为 SQLServer 计算列。首先生成模型后,将计算列写入数据库,然后返回并将其连接到 EF 对象。

关于c# - 如何将 EF 属性转换为 SQL Server 的计算列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com