Хранить только дату в базе данных, а не на время С#

У меня есть тестовый класс и свойство ExecutionDate, в котором хранится только дата, но когда мы используем [DataType(DataType.Date)], который также сохраняет временную часть в базе данных, но я хочу только часть даты.

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

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

Можно ли хранить только дату во временной части в db с помощью Entity Framework? Пожалуйста, помогите мне....

Я добавил моментальный снимок при использовании [DataType(DataType.Date)], который хранит временную часть 00:00. Я хочу удалить это

введите описание изображения здесь

Ответ 1

Я думаю, вы пытаетесь указать тип столбца базы данных. Вы можете использовать аннотации данных, как описано в этой статье.

Вот пример:

[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, мы изменили ее здесь. Также Datetime (это то, что вы задали, я полагаю), который по умолчанию сопоставляет с дататимом в sql-сервере, изменяется на date, который хранит только часть даты, а не временную часть значения DateTime.

Ответ 2

Как сказал Дэвид выше, как только вы принесете эти данные в приложение, это будет 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");

Ответ 3

"Не путайте атрибут Column TypeName с DataType DataAnnotation. DataType - это аннотация, используемая для пользовательского интерфейса, которая игнорируется Code First". (https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations)

Как уже упоминалось ранее, вы должны использовать

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

Ответ 4

Ваш столбец должен быть в настоящее время datetime, поскольку часть времени отображается на вашем снимке экрана. В SQL-сервере время не будет отображаться, если это только столбец типа date. В С# нет типа date, просто datetime. Но это нормально, когда вы извлекаете даты из db, время будет равно 00:00:00. Просто убедитесь, что ваш тип столбца на db является "date", а не "datetime".

alter table tableName alter column ExecutionDate date

Или щелкните правой кнопкой мыши таблицу, конструктор, измените тип столбца вручную.

Ответ 5

Изменить DateTime на nvarchar (10) в базе данных если u использовать DateTime в базе данных 00.00.00 будет автоматически назначаться базой данных

string date = DateTime.Today.ToShortDateString();

Ответ 6

Измените тип данных в базе данных от Datetime до Date type

Это действительно проблема для вас? В какой-то момент вам может понадобиться время,