我最近开始深入研究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中添加它一样管理工作室。
感谢任何帮助,谢谢!
这是我的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; }
}
答案 0 :(得分:0)
正如您在对您的问题的评论中所说,您正在使用在SSMS中创建的数据库,这意味着您正在使用数据库优先方法。
您需要按照以下步骤确保将TestPerson
表中创建的所有行的CreateDate
列设置为当前sql server日期时间作为默认值。
TestPerson
表如果在为CreatedDate
表进行新插入时未提供该列,请告知您的数据库将GETUTCDATE()
值设置为TestPerson
。所以使用这个TSQL:
ALTER TABLE TestPerson
ADD CONSTRAINT DF_CreatedDateValue DEFAULT GETUTCDATE() FOR CreatedDate
告诉实体Framwework数据库使用CreatedDate
数据注释属性计算(生成)您的DatabaseGenerated
属性,如下所示:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreateDate { get; private set; }
或者使用如下所示的流畅配置:
modelBuilder.Entity<TestPerson>().Property(entity => entity .TestCreated)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
That'all!您可以测试Web API。将person
实例保存到数据库后,您将看到CreateDate
将填充数据库创建的默认值。