我被卡住了。我正在创建一个作者数据库,并遇到了一个问题。我需要将Umrti (死亡日期)值保存为null,但它总是将该值保存为01.01.0001。我尝试了一些东西,现在我的代码如下所示:
public class AutorDetailModel
{
public int Id { get; set; }
[Required]
public string Jmeno { get; set; }
[Required]
public string Prijmeni { get; set; }
public string ProstredniJmeno { get; set; }
[DotvvmEnforceClientFormat]
public DateTime Narozeni { get; set; }
[DotvvmEnforceClientFormat]
public DateTime? Umrti { get; set; }
public string Bio { get; set; }
public string Narodnost { get; set; }
public byte Obrazek { get; set; }
}在这样的服务中:
public async Task UpdateAutorAsync(AutorDetailModel autor)
{
using (var dbContext = CreateDbContext())
{
var entity = await dbContext.Autors.FirstOrDefaultAsync(s => s.Id == autor.Id);
entity.Jmeno = autor.Jmeno;
entity.Prijmeni = autor.Prijmeni;
entity.ProstredniJmeno = autor.ProstredniJmeno;
entity.Narozeni = autor.Narozeni;
entity.Umrti = autor.Umrti;
entity.Bio = autor.Bio;
entity.Narodnost = autor.Narodnost;
entity.Obrazek = autor.Obrazek;
await dbContext.SaveChangesAsync();
}
}然而,autor.Umrti仍然给出了这个错误:
不能隐式转换类型“System.DateTime?”到“System.DateTime”。存在显式转换(是否缺少强制转换?)
我真的被困住了,我会感谢你的任何建议。谢谢
为我糟糕的英语道歉:)
发布于 2018-04-21 00:24:19
如果使用Server (可能还有其他数据库引擎),则无法在DateTime字段中保存空值。
您必须将NULL转换为日期,任何日期,才能将其保存在db中。通常,Server使用'1900-01-01‘来表示空日期。在大多数情况下,这很好,除非你在18世纪末处理历史数据,否则它不会与你的有效数据发生冲突。当从db读取时,您可以在代码中将值为'1900-01-01‘的所有日期转换为空,如果代码中的值为空,则将其写入db时将其转换为'1900-01-01’。
发布于 2018-04-21 04:43:09
您必须检查Umrti是否为空。
public async Task UpdateAutorAsync(AutorDetailModel autor)
{
using (var dbContext = CreateDbContext())
{
var entity = await dbContext.Autors.FirstOrDefaultAsync(s => s.Id == autor.Id);
entity.Jmeno = autor.Jmeno;
entity.Prijmeni = autor.Prijmeni;
entity.ProstredniJmeno = autor.ProstredniJmeno;
entity.Narozeni = autor.Narozeni;
if(autor.Umrti!=null)
entity.Umrti = autor.Umrti;
entity.Bio = autor.Bio;
entity.Narodnost = autor.Narodnost;
entity.Obrazek = autor.Obrazek;
await dbContext.SaveChangesAsync();
}
}https://stackoverflow.com/questions/49950088
复制相似问题