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

时间:2016-05-04 10:33:09

标签: c# sql-server entity-framework datetime datetime2

我有一个值

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 == false时,问题是ok == true。 :|

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

2 个答案:

答案 0 :(得分:4)

  

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

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

[Column(TypeName = "datetime2")]

或者如果您使用的是Fluent API,则可以将其添加到OnModelCreating的{​​{1}}中:

DBContext

答案 1 :(得分:0)

<强>解

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

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

3)与

比较
someEntity.ChangedOn2.Equals(dt.Ticks);