c# - SQL Server (getutcdate()) 在外部 POST 上插入默认值
问题描述
我最近开始深入研究 SQL Server Management Studio 和 Web API 2。我遵循了一个教程,该教程指示我可以获得将数据库行插入表中的当前日期。我使用了这个getutcdate()
函数,当我在 SQL Server Management Studio 中创建一个新行时,日期会自动填写,就像它应该的那样。
但是,当从我的 WebAPI 项目(使用实体框架)提交 POST 时,创建日期值填充为此值 0001-01-01 00:00:00.0000000。
现在,我假设这是datetime2(7)
类型或其他内容的默认值,但我想知道为什么它不会自动生成当前日期时间,就像我在 SQL Server Management Studio 中添加它一样。
任何帮助表示赞赏,谢谢!
这是我的Post()
方法:
public HttpResponseMessage Post([FromBody] TestPerson person)
{
try
{
using (TestWebAPIEntities entities = new TestWebAPIEntities())
{
entities.TestPerson.Add(person);
entities.SaveChanges();
var message = Request.CreateResponse(HttpStatusCode.Created, person);
message.Headers.Location = new Uri(Request.RequestUri + person.id.ToString());
return message;
}
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}
这是TestPerson
生成的类:
public partial class TestPerson
{
public int id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public string PhoneNumber { get; set; }
public int NumberOfKids { get; set; }
public System.DateTime CreateDate { get; set; }
}
解决方案
正如您在对问题的评论中所说,您使用的是在 SSMS 中创建的数据库,这意味着您使用的是数据库优先方法。
您需要按照这些步骤确保所有在TestPerson
表中创建的行都将其CreateDate
列设置为当前 sql server 日期时间作为默认值。
修改TestPerson
表
告诉您的数据库将CreatedDate
值GETUTCDATE()
设置为在为表进行新插入时未提供该列的时间TestPerson
。所以使用这个 TSQL:
ALTER TABLE TestPerson
ADD CONSTRAINT DF_CreatedDateValue DEFAULT GETUTCDATE() FOR CreatedDate
修改您的 TestPerson 实体类
告诉 Entity Framwework,您的CreatedDate
属性将由数据库使用DatabaseGenerated
数据注释属性计算(生成),如下所示:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreateDate { get; private set; }
或者通过使用流畅的配置,如下所示:
modelBuilder.Entity<TestPerson>().Property(entity => entity .TestCreated)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
测试您的 Web API
就这些!您可以测试您的 Web API。将person
实例保存到数据库后,您将看到CreateDate
将填充数据库创建的默认值。
推荐阅读
- log4j2 - Log4j2,如何处理访问被拒绝异常
- active-directory - 搜索过滤器中具有通配符模式的嵌套组的 Active Directory 搜索查询
- android - 无法获取 ttc 文件适用于 android 中的字体
- django - 按 id 批量删除 Django
- javascript - 用猫鼬更新值
- reactjs - 当我打开一个模式时,道具是空的 - React
- laravel - Laravel 中的查询生成器无法正常工作
- c# - c# 使用 MySQL 数据库中的后台工作人员每 5 秒更新一次数据网格视图
- html - 是否可以在下拉列表中显示一定数量的对象?(但保持休息可供搜索)
- python - Python导入交互