我目前正在处理一个使用SQL Server的项目。我试图从Randevular
表中获取数据。但是当我运行linq代码时,它没有返回任何数据。我得到一个错误
无法将类型为“System.TimeSpan”的对象强制转换为类型"System.DateTime“
下面是我的Randevu
模型类:
public class Randevu
{
[Key]
public int RandevuID { get; set; }
[Required]
public DateTime RandevuDate { get; set; }
[Required]
public DateTime RandevuTime { get; set; }
}
字符串
下面是Randevular
表的迁移模型快照:
modelBuilder.Entity("webProgProje.Models.Randevu", b =>
{
b.Property<int>("RandevuID")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("RandevuID"));
b.Property<DateTime>("RandevuDate")
.HasColumnType("datetime2"); //NOTE: i changed "datetime2" to "date" BEFORE applying to database
b.Property<DateTime>("RandevuTime")
.HasColumnType("datetime2"); //NOTE: i changed "datetime2" to "time" BEFORE applying to database
b.HasKey("RandevuID");
b.ToTable("Randevular");
});
型
最后是migration.cs
文件:
migrationBuilder.CreateTable(
name: "Randevular",
columns: table => new
{
RandevuID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
RandevuDate = table.Column<DateTime>(type: "datetime2", nullable: false), //NOTE: i changed "datetime2" to "date"
RandevuTime = table.Column<DateTime>(type: "datetime2", nullable: false), //NOTE: i changed "datetime2" to "time"
});
型
我只是想列出所有的Randevu
的存储在数据库中,但我陷入了这个奇怪的问题。
我尝试在Randevu model
中将“DateTime”更改为“TimeSpan”并运行它,再次发生相同的错误。但这一次是:
无法将“System.DateTime”类型的对象强制转换为“System.TimeSpan”类型
我还尝试在应用到数据库之前将migration.cs
文件和快照中的所有DateTime更改为TimeSpan,但同样的问题仍然存在。
2条答案
按热度按时间wn9m85ua1#
我找到了一个解决方案.一切都解释在这个链接:
https://erikej.github.io/efcore/sqlserver/2023/09/03/efcore-dateonly-timeonly.html
以下是我为解决这个问题所做的事情。
我无法运行console命令,但我也找到了一种方法。在Visual Studio中,转到:
工具-> NuGet软件包管理器->管理NuGet软件包以解决.
从那里,单击浏览选项卡并搜索:
ErikEJ.EntityFrameworkCore.SqlServer.DateOnlyTimeOnly
现在,在打开的窗口中选择您的项目并安装最新的稳定版本。
我将
Randevu
模型类从字符串
收件人:
型
然后将
DbContext
模型类中的OnConfiguring
方法从:型
收件人:
型
迁移后,
Randevular
表的迁移模型快照如下所示:型
为此:
型
所以
migration.cs
文件是这样的:型
为此:
型
在所有这些步骤之后,它工作得很好。我在从服务器请求数据时没有收到任何错误。
结果,
存储的数据是:
Randevu日期:2023年12月12日,Randevu时间:10:00:00)
我从数据库中得到的值,
日期值:
年2023月12日12 DayOfWeek星期二DayOfYear 346日编号738865
时间值:
小时10分钟0秒0毫秒0滴答3600000000
我认为我们可以从现在开始将输出字符串操作为我们想要显示的格式。
izj3ouym2#
字符串