无法映射属性“Ogrenci.OgrenciBirthDate”,因为它的类型为“DateOnly”,该类型不是受支持的基元类型或有效的实体类型。显式映射此属性,或者使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略它。
//modelclass
[DisplayName("Doğum Tarihi")]
public DateOnly OgrenciBirthDate { get; set; }
//controller
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Ogretmen obj)
{
if (ModelState.IsValid)
{
//obj.OgretmenBirthDate = DateTime.Now;
_db.Ogretmenler.Add(obj);
_db.SaveChanges();
return RedirectToAction("Index");
}
return View(obj);
}
我收到此错误,我正在尝试获取用户的出生日期并将其收集在 sql 中,我只想要日期,而不是时间,所以首先我尝试使用 DateTime 执行此操作,但它给出了另一个错误,并且还给出了时间我不想要的值。我该怎么办
这里是
DateOnly
的转换器,其中数据库中的列类型是date
public class DateOnlyConverter : ValueConverter<DateOnly, DateTime>
{
public DateOnlyConverter()
: base(dateOnly =>
dateOnly.ToDateTime(TimeOnly.MinValue),
dateTime => DateOnly.FromDateTime(dateTime)) { }
}
将以下方法添加到您的
DbContext
类中,该类处理 DateOnly
类型模型中所有属性的转换
protected override void ConfigureConventions(ModelConfigurationBuilder builder)
{
builder.Properties<DateOnly>()
.HaveConversion<DateOnlyConverter>()
.HaveColumnType("date");
base.ConfigureConventions(builder);
}
在模型中设置属性
public DateOnly? OgrenciBirthDate { get; set; }
另请参阅会议前配置
Udate 02/2023 现在有一个 NuGet 包ErikEJ.EntityFrameworkCore.SqlServer.DateOnlyTimeOnly
更新 7/27/2023
请参阅 EF Core 8 预览版了解 SQL Server 上支持的 DateOnly/TimeOnly
更新11/2023
EF Core 8 原生支持 DateOnly 和 TimeOnly