C# 如何实现DateTime实体属性以设置始终为DateTime。现在

C# 如何实现DateTime实体属性以设置始终为DateTime。现在,c#,entity-framework,datetime,properties,C#,Entity Framework,Datetime,Properties,我读过很多关于自动实现属性的书,但我还是不太明白。我已经和实体: public class News { public int NewsId { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime Date { get; set; } } 现在,我不希望每次创建News类

我读过很多关于自动实现属性的书,但我还是不太明白。我已经和实体:

 public class News
    {
        public int NewsId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public DateTime Date { get; set; }
    }
现在,我不希望每次创建
News
类型的新实体时,用户自己设置日期。我希望记录与创建的日期时间一起自动保存。考虑到这一点,我建议只需将我的属性的
修改为:

public DateTime Date 
{
  get;
  set
  {
    Date = DateTime.Now;
  }
}
但是在阅读本主题时,我发现标准方法是创建私有变量,并在实现中使用它。这就是我有点迷路的地方

private DateTime _date = null;
public DateTime Date
{ 

我不确定getter和setter的实现。有这样的内容似乎是合理的:
set{{u date=DateTime.Now;}
我不知道如何处理
get
部分,因为我希望从数据库中获取此数据,所以类似于:
get{return\u date;}即使几乎每个自动实现的
set`示例都返回私有变量,但对我来说意义不大。但是我认为,如果属性是一个实体,这就没有多大意义。

您可以在类中添加一个构造函数,然后在那里初始化属性

public class News
{

   // properties goes here

   public News()
   {
       Date=DateTime.Now;
   }

}
更好的构造函数是

public News(int newsId, string title, string content)
{
    NewsId=newsId;
    Title=title;
    Content=content;
    Date=DateTime.Now;
}
这样,您就可以在一行代码中创建News类型的对象

News news = new News(1,"title1","whatever");

返回当前日期的一些方法:

 public DateTime Date { get { return DateTime.Now; } }


第一个实例将始终返回当前日期/时间,即使该实例是在一段时间前创建的。第二个将返回创建实例的日期/时间。两者都会阻止用户设置该日期值。

不要触摸getter和setter!它们是从模板自动生成的,每隔一段时间就会被覆盖。相反,正如您可能已经注意到生成的实体被部分声明的那样,创建一个部分类并在那里声明一个构造函数,该构造函数将r实体的日期设置为
DateTime。现在就开始构建了(正如您所希望的那样)


你好这个
value
变量是什么,我已经搜索过了,但是我找不到关于它是如何创建和使用的解释。似乎我可以在实现自定义getter/setter时立即使用,但我真的不知道
Date=DateTime.Now
value=DateTime.Now
@Leron上下文关键字值在普通属性声明的set访问器中使用。我以前用过假的。请看这里,但是通过移动构造函数中的逻辑,您已经改变了它。这更好吗,还是因为我问过如何使用我的
Date
属性来实现这一点?@Leron,我认为有两种方法可以实现这一点。第一个是上面的第二个是汉斯建议的。这是您个人的看法,而不是在这种情况下更好的实现。NewsId是数据库中自动生成的属性。问题是如何在保存实体时自动设置属性,但在我查询以从表中获取日期时设置属性。因为它是实体的属性,所以我需要能够显示创建时间(从名称中可以看出,它是一个
新闻
表)。因此,当我得到日期时,我需要数据库日期,但当我设置日期时,这意味着我要创建新实体/新闻,我要设置实体创建的日期。所以我猜是第二种方法?@Leron-如果一些代码可以设置日期(从数据库中检索),而其他代码不能(“客户端”代码),那就是一个问题。您可以使用其他构造函数来设置日期,但是您必须自己将数据库写入实体代码。我明白您的意思。如果我在查询记录时理解正确,则日期将始终被DateTime.Now覆盖。因此,只需在代码中设置设置其他属性的日期,而不是寻找将逻辑移动到实体的方法,就更容易了?@Leron-correct。您仍然可以在构造函数中为新的新闻项提供一个默认值(DateTime.Now)。嗯,我不确定我是否理解您的意思。我没有写这篇文章,但它是
code-First
工作流,所以所有的实体都是我写的。我见过实体的分部类,但在自动生成实体的
Database First
工作流中使用。有我自己的
News
实体,然后添加部分类来添加构造函数,这有什么意义?啊,我明白了!但是,您可以轻松地将日期设置为DateTime。现在在您的构造函数中,其他人也提到了这一点。
 public class News
 {
    public News()
    {
       Date = DateTime.Now;
    }
    public DateTime Date { get; private set; }
 }
public partial class News
{
  public News()
  {
    this.Date = DateTime.Now;
  }
}