我正在使用带有EF Core Code First方法的ASP.NET Core 2.2.4编写新应用程序。我编写了域模型,并通过Package Manager控制台更新了数据库,但这导致整个域模型中所有的DateTime属性都被创建为DateTime2(7)表列。 我只需要DateTime。
首先,我尝试通过在SQL Server中编写查询以更改数据类型来更改此设置,但确实如此,在SQL Server中,这表明它已更改为日期时间。但是,当我在Visual Studio中打开SQL Server对象资源管理器时,它仍将列显示为datetime2(7)类型。
之后,我尝试将以下注释添加到DateTime属性中 [Column(TypeName =“ DateTime”)]。之后,我添加了一个迁移,并通过Package Manager Console更新了数据库。这没有任何效果。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace GYM.CoreApp.WebUI.Models
{
public class Employee
{
[Key]
public int EmployeeId { get; set; }
[Required]
[MaxLength(100), MinLength(2)]
[Display(Name ="First Name")]
public string FirstName { get; set; }
[Required]
[MaxLength(100), MinLength(2)]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[Column(TypeName = "DateTime")]
[Display(Name = "Date of birth")]
public DateTime DateOfBirth { get; set; }
[Required]
[MaxLength(13), MinLength(13)]
[Display(Name = "EMBG")]
public string EMBG { get; set; }
[Required]
[MaxLength(200), MinLength(2)]
[Display(Name = "Home address")]
public string Address { get; set; }
[Required]
[MaxLength(13), MinLength(9)]
[Display(Name = "Phone number")]
public string PhoneNumber { get; set; }
[Required]
[Display(Name = "Salary per month")]
public int SalaryPerMonth { get; set; }
[Required]
[Column(TypeName = "DateTime")]
[Display(Name = "Date when joined company")]
public DateTime DateWhenJoined { get; set; }
[Required]
[Display(Name = "Still Employed")]
public bool StillEmployed { get; set; }
}
}
答案 0 :(得分:1)
确保安装Microsoft.EntityFrameworkCore.SqlServer
。然后使用TypeName
属性:
[Column(TypeName = "datetime")]
如果SQL Server Object Explorer仍显示datetime2,则可能需要退出并重新打开Visual Studio。
答案 1 :(得分:1)
此答案没有提供如何强制EF Core用datetime
而不是datetime2
创建列的原因,
SQL服务器datetime2
和datetime
之间的主要区别是可以利用的精度和更宽的日期范围。 datetime2
的默认值为System.DateTime
,并且在使用兼容客户端时没有理由不使用它。
System.DateTime
直接映射到SQL Server datetime2
,是Microsoft建议的用于在SQL Server中存储System.DateTime
的数据类型。
还值得注意的是,datetime2(7)
比datetime
占用更少的字节空间,并提供更高的精度。
请参阅MSDN SQL Server datetime上的注释