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

Dar*_*ryl 5 sql-server asp.net-mvc triggers asp.net-mvc-3

我已经生成了类(DbContext)建模我的数据库(SQL Server 2008 R2),在我的大多数表中我都有标准的ModifiedDate和CreatedDate(No Nulls).其中每个都在SQLServer中有一个默认的getdate(),我有一个触发器可以在任何更新时更新ModifiedDate.

生成的视图包括ModifiedDate和CreatedDate字段,我不想要(用户不应该看到这些),所以我已经把它们拿出来了,但是当使用生成的Create视图添加新条目时,我收到错误"将datetime2数据类型转换为日期时间数据类型会导致超出范围的值".

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

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

WCR*_*CRC 4

这是 Entity Framework 和 Linq to SQL 中的常见问题:

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

在实体框架中,情况略有不同:您将字段上的“StoreGeneratePattern”设置为“Identity”或“Compulated”。描述如下:

http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.store generatedpattern.aspx

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

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