Sql server 在SQL Server 2008 R2中,创建和修改的MVC 3日期具有默认值和触发器,但仍然需要值

Sql server 在SQL Server 2008 R2中,创建和修改的MVC 3日期具有默认值和触发器,但仍然需要值,sql-server,asp.net-mvc,asp.net-mvc-3,triggers,Sql Server,Asp.net Mvc,Asp.net Mvc 3,Triggers,我已经生成了类(DbContext)来建模我的db(SQL Server 2008 R2),在我的大多数表中,我都有标准的ModifiedDate和CreatedDate(没有空值)。在SQLServer中,每一个都有一个默认的getdate(),我有一个触发器在任何更新时更新ModifiedDate 生成的视图包含ModifiedDate和CreatedDate字段,这是我不希望看到的(用户不应该看到),因此我将这些字段去掉了,但是当使用生成的创建视图添加新条目时,出现错误“将datetime

我已经生成了类(DbContext)来建模我的db(SQL Server 2008 R2),在我的大多数表中,我都有标准的ModifiedDate和CreatedDate(没有空值)。在SQLServer中,每一个都有一个默认的getdate(),我有一个触发器在任何更新时更新ModifiedDate

生成的视图包含ModifiedDate和CreatedDate字段,这是我不希望看到的(用户不应该看到),因此我将这些字段去掉了,但是当使用生成的创建视图添加新条目时,出现错误“将datetime2数据类型转换为datetime数据类型导致值超出范围”

然后我添加了一些默认值,它确实添加了记录,但它自然添加了我输入的值,而不是我更喜欢的SQL getdate()值(我希望它显示服务器时间)。检查对象(db.SaveChanges())字段的值为{1/01/0001 12:00:00 AM}


如何在不输入日期的情况下使用这些模型???我已经搜索过了,但没有找到我的答案-(

这是实体框架和Linq to SQL中的常见问题:

在Linq To SQL中,模型不知道默认值,因此尝试将其指定为“null”-在本例中,这是不可接受的。要解决此问题,请打开DBML文件,并将相关字段的“自动生成值”选项设置为“true”

在实体框架中有点不同:您将字段上的“StoreGeneratedPattern”设置为“Identity”或“Computed”。下面是描述:

EF将自动为标识类型字段执行此操作,但不会为默认值/非空字段执行此操作。您可能希望将CreatedDate设置为“标识”(仅在插入时更新),将ModifiedDate设置为“计算”(在插入和更新时更新)


这样做的副产品是,您将无法通过Linq设置字段-但我认为这在您的用例中是很好的。

感谢您的帮助,这是非常正确的。我们发现这将是在您发表文章之前不久的解决方案,但事实证明,Entity Framework中存在一个缺陷,这意味着这些设置无论如何都不会被采用。VS2010 SP1修复了这个错误,结果证明我们没有运行SP1。不过现在一切都好了,谢谢你的帮助!