我对此很陌生,我的问题非常特殊。我在谷歌上搜索了很多,但没能找到任何相关信息。我在数据库中有两个属性,StartDate 和 StartMonth。 StartDate 是 DateTime 类型,StartMonth 是字符串类型。 (我知道将这两个都保存到数据库中是愚蠢的,但这不是我可以更改的东西,因为我没有这样做的权限。)我的问题是如何在数据库模型中将 StartMonth 设置为等于StartDate 中的月份(因为它是相同的)?相反,这样做的正确方法是什么?非常感谢任何帮助!
需要说明的是,我目前有:
[Table("EMPLOYMENT")]
public class Employment : EntityBase
{
[Column("STARTDATE")]
public DateTime? StartDate { get; set; }
[Column("STARTMONTH")]
public string StartMonth { get; set; }
}
编辑: 我尝试了以下方法(我意识到这不是任何建议,但它是由一位同事建议的):
[Table("EMPLOYMENT")]
public class Employment : EntityBase
{
[Column("STARTDATE")]
internal DateTime? StartDateInternal { get; set; }
[Column("STARTMONTH")]
private string StartMonth { get; set; }
[NotMapped]
public DateTime? StartDate
{
get
{
return StartDateInternal;
}
set
{
StartDateInternal = value;
StartMonth = value?.ToString("MMMM");
}
}
具体来说,StartMonth 现在是私有(private)的,StartDate 现在是一个 NotMapped 属性,它设置 StartDateInternal 和 StartMonth 并返回 StartDateInternal 值,并且之前代码中的原始 StartDate 现在命名为 StartDateInternal。虽然我可以看到该值一直正确传递给模型,但它不会设置该值。它总是在数据库中将其设置为 NULL。我不确定为什么,想知道是否有人能明白为什么。
最佳答案
您可以使用支持字段,并从 StartDate 获取月份仅当 StartMonth 值不是放。
private string _startMonth;
[Column("STARTMONTH")]
public string StartMonth
{
get
{
if (string.IsNullOrWhiteSpace(_startMonth) && StartDate.HasValue)
return StartDate.Value.ToString("MMMM");
return _startMonth;
}
set { _startMonth = value; }
}
关于c# - 将属性设置为另一个属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053990/