gko*_*kon 2 c# asp.net-mvc entity-framework asp.net-mvc-4
首先,我使用的是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; }
}
Run Code Online (Sandbox Code Playgroud)
此模型已在数据库中创建此表:

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

我试图在我的控制器中添加一个带有此代码的新行:
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();
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它会在_db.SaveChanges()中抛出异常; 线.
保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.
我知道当我看到这个异常时,关系存在问题.而且我也理解我正在尝试将对象插入到需要整数的列中.但我不明白它创建了User_UserId和Work_WorkId列并为它们提供了int数据类型.但是在控制器中,它需要一个用户对象.
我的模型,控制器可能都错了.但正如我所说,我是EF和MVC的新手.
将WorkLog插入数据库应该做些什么更改?
我希望我清楚自己.
任何帮助,将不胜感激.
内在的例外是SqlException." 将datetime2数据类型转换为日期时间数据类型会导致超出范围的值 ".如果您搜索该消息,您很快就会找到原因:
您已设置CreatedDate并Date在WorkLogs合理值,以便罪魁祸首很可能是CreatedDate和/或UpdatedDate在实例Works.
如果你还没有设置它们,那么它们的值将是.NET的默认值 - DateTime.MinValue- 年0001.尝试将其插入到数据库中并且你得到溢出,因为在Sql Server中最小值是SqlDateTime.MinValue- 1753年.
我建议你在构造函数中设置CreatedDateto 的值,DateTime.Now并将类型更改为UpdatedDate可为空DateTime(默认值为null而不是DateTime.Min)
| 归档时间: |
|
| 查看次数: |
10211 次 |
| 最近记录: |