0

我被困住了。我正在创建一个作者数据库并遇到问题。我需要将值 Umrti(死亡日期)保存为空值,但它始终将该值保存为 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?” 到“系统。日期时间”。存在显式转换(您是否缺少演员表?)

我真的被困住了,将不胜感激任何建议。谢谢

对不起我的英语不好:)

4

2 回答 2

1

您必须检查 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();
        }
    }
于 2018-04-21T04:43:09.167 回答
0

如果您使用的是 SQL Server(也可能是其他数据库引擎),则无法在 DateTime 字段中保存 NULL 值。

您必须将 NULL 转换为日期,任何日期,才能将其保存在数据库中。通常 SQL Server 使用 '1900-01-01' 来表示 NULL 日期。在大多数情况下,这很好,除非您使用的是 18 世纪末的历史数据,否则它不会与您的有效数据发生冲突。从数据库读取时,您可以将代码中值为“1900-01-01”的所有日期转换为空,如果代码中的值为空,则在写入数据库时​​将其转换为“1900-01-01” .

于 2018-04-21T00:24:19.213 回答