由于关系问题,无法将行插入数据库

 hqgj15087878726 发布于 2023-02-14 05:02

首先,我使用的是ASP.NET MVC 4和Entity Framework 5.这是我在MVC中的第一个项目.

我试图在我的WorkLogs表中插入一行.我用代码第一种方法创建了我的数据库.

这是我的WorkLogs模型(因为我创建了数据库,所以我没有对我的模型进行任何更改):

public class WorkLogs
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int WorkLogId { get; set; }
    [Required]
    public int Time { get; set; }
    [Required]
    public DateTime Date { get; set; }
    [Required]
    public DateTime CreatedDate { get; set; }
    [Required]
    public bool IsSent { get; set; }

    public virtual Users User { get; set; }
    public virtual Works Work { get; set; }
}

此模型已在数据库中创建此表:

D b

这些是关系(对我来说似乎是正确的):

D b

我试图在我的控制器中添加一个带有此代码的新行:

WorkLogs log = new WorkLogs()
{
    Time = iTime,
    Date = beginWeek.AddDays(i),
    CreatedDate = DateTime.Now,
    User = userObj, 
    Work = workObj, 
    IsSent = true
};

_db.WorkLogs.Add(log);
_db.SaveChanges();

当我运行它时,它会在_db.SaveChanges()中抛出异常; 线.

保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.

我知道当我看到这个异常时,关系存在问题.而且我也理解我正在尝试将对象插入到需要整数的列中.但我不明白它创建了User_UserId和Work_WorkId列并为它们提供了int数据类型.但是在控制器中,它需要一个用户对象.

我的模型,控制器可能都错了.但正如我所说,我是EF和MVC的新手.

将WorkLog插入数据库应该做些什么更改?

我希望我清楚自己.

任何帮助,将不胜感激.

1 个回答
  • 内在的例外是SqlException." 将datetime2数据类型转换为日期时间数据类型会导致超出范围的值 ".如果您搜索该消息,您很快就会找到原因:

    您已设置CreatedDateDateWorkLogs合理值,以便罪魁祸首很可能是CreatedDate和/或UpdatedDate在实例Works.

    如果你还没有设置它们,那么它们的值将是.NET的默认值 - DateTime.MinValue- 年0001.尝试将其插入到数据库中并且你得到溢出,因为在Sql Server中最小值是SqlDateTime.MinValue- 1753年.

    我建议你在构造函数中设置CreatedDateto 的值,DateTime.Now并将类型更改为UpdatedDate可为空DateTime(默认值为null而不是DateTime.Min)

    2023-02-14 05:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有