【发布时间】:2017-08-20 14:35:57
【问题描述】:
我对此很陌生,我的问题非常特殊。我用谷歌搜索了很多,但找不到任何关于此的内容。我在数据库中有两个属性,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 现在是私有的,StartDate 现在是一个 NotMapped 属性,它设置 StartDateInternal 和 StartMonth 并返回 StartDateInternal 值,而之前代码中的原始 StartDate 现在名为 StartDateInternal。虽然我可以看到该值一直正确传递给模型,但它不会设置该值。它总是在数据库中将其设置为 NULL。我不知道为什么,想知道是否有人能明白为什么。
【问题讨论】:
-
您可以直接从您的表中更改表架构,设置 STARTMONTH = Datepart(mm,STARTDATE)
-
如果可以的话,但我没有权限弄乱表架构,我们的表是从 Oracle 数据库(Oracle 到 SQL)中提取的,所以弄乱架构可能会搞砸这个过程也是如此。
标签: c# asp.net asp.net-mvc