繁体   English   中英

代码首先在实体框架中设置列,在sql server中键入datetime2

[英]Code first in entity framework set column to type datetime2 in sql server

我有一个价值

DateTime dt = DateTime.Parse("2015-10-12 14:24:40.582");

用它我做:

SomeEntity someEntity = new SomeEntity() 
{
    ID = 1, 
    ChangedOn = dt
};
context.SomeEntities.Add(someEntity);

我发现:在数据库表中存储的值是“2015-10-12 14:24:40.58 3 0000”

我手动找到它

SELECT CONVERT(datetime2, ChangedOn) FROM SomeEnititiesTable WHERE ID=1;

我从数据库加载someEntity并执行

bool ok = someEntity.ChangedOn.Equals(dt);

问题是,当我期望ok == true时, ok == false :|

如何在实体框架中首先生成代码生成datetime2类型的列而不是迁移中的datetime?

如何在实体框架中首先生成代码生成datetime2类型的列而不是迁移中的datetime

要指定要使用的列的类型,可以将以下属性添加到模型的属性ChangedOn

[Column(TypeName = "datetime2")]

或者,如果您使用的是Fluent API,则可以将其添加到您的OnModelCreatingDBContext

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    // ...

    modelBuilder.Entity<someEntity>()
        .Property(p => p.ChangedOn)
        .HasColumnType("datetime2");

    // ...
}

1)添加类型为long的字段ChangedOn2。

2)将dt.Ticks值保存到ChangedOn2。

3)比较

someEntity.ChangedOn2.Equals(dt.Ticks);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM