web-dev-qa-db-ja.com

時間部分ではなくデータベースに日付のみを保存するC#

テストクラスと、日付のみを格納するExecutionDateプロパティがありますが、データベースに時間部分も格納する[DataType(DataType.Date)]を使用する場合、日付部分のみが必要です。

_public class Test
{
     [Key]
     public int Id { get; set; }

     [DataType(DataType.Date)]
     public DateTime ExecutionDate { get; set; }      
}
_

Entity Frameworkを使用してDBに時間部分の日付のみを保存する方法はありますか?私を助けてください....

時刻部分00:00を保存する[DataType(DataType.Date)]を使用するときにスナップショットを追加しました

enter image description here

14
KARAN

データベースの列タイプを指定しようとしていると思います。 this の記事で説明されているように、データ注釈を使用できます。

以下に例を示します。

[Table("People")]
public class Person
{
    public int Id { get; set; }

    [Column(TypeName = "varchar")]
    public string Name { get; set; }

    [Column(TypeName="date")]
    public DateTime DOB { get; set; }
}

デフォルトでは、文字列はnvarcharに変換されますが、ここで変更しました。また、デフォルトではsqlサーバーのdatatimeにマップされるDatetime(これはあなたが推測したものです)はdate値の時間部分ではなく日付部分のみを格納するDateTimeに変更されます。

31
Ravi M Patel

上記でDavidが言ったように、そのデータをアプリケーションに取り込むと、日付にタイムスタンプが追加されたDateTimeになります。日付を文字列として保存し、Convertを使用して任意の操作のためにDateTimeに変更した場合も、これは同じ結果になります。

string date = "2015-11-17";
var dateTime = Convert.ToDateTime(date);

タイムスタンプを回避するためにアプリケーションで文字列を操作する場合を除き、DateTimeのみを使用できます。ただし、表示のために、いつでも日付をフォーマットし、タイムスタンプを削除できます。

var dateTime = DateTime.Now;
var formatDate = dateTime.ToString("yyyy-MM-dd");
1
Ryan Intravia

データベースでDateTimeを使用する場合、データベースでDateTimeをnvarchar(10)に変更します。データベースによって00.00.00が自動的に割り当てられます。

string date = DateTime.Today.ToShortDateString();
0