entity framework 中的代码首先将列设置为在 sql 服务器中键入 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);
我发现:在数据库 table 中存储的值是“2015-10-12 14:24:40.5830000”
我用
手动找到了它
SELECT CONVERT(datetime2, ChangedOn) FROM SomeEnititiesTable WHERE ID=1;
我从数据库加载 someEntity 并执行
bool ok = someEntity.ChangedOn.Equals(dt);
问题是 ok == false
而我期望 ok == true
。 :|
如何使 code first in entity framework 生成类型为 datetime2 的列而不是迁移中的 datetime?
解决方案
1) 添加一个类型为long的字段ChangedOn2。
2) 将 dt.Ticks 值保存到 ChangedOn2。
3) 比较
someEntity.ChangedOn2.Equals(dt.Ticks);
How to make code first in entity framework generate column of type datetime2
instead of datetime
in migrations?
要指定要使用的列的类型,您可以将以下属性添加到模型的 属性 ChangedOn
中:
[Column(TypeName = "datetime2")]
或者,如果您使用的是 Fluent API,那么您可以将其添加到 DBContext
的 OnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// ...
modelBuilder.Entity<someEntity>()
.Property(p => p.ChangedOn)
.HasColumnType("datetime2");
// ...
}
我有一个价值
DateTime dt = DateTime.Parse("2015-10-12 14:24:40.582");
我用它:
SomeEntity someEntity = new SomeEntity()
{
ID = 1,
ChangedOn = dt
};
context.SomeEntities.Add(someEntity);
我发现:在数据库 table 中存储的值是“2015-10-12 14:24:40.5830000”
我用
手动找到了它SELECT CONVERT(datetime2, ChangedOn) FROM SomeEnititiesTable WHERE ID=1;
我从数据库加载 someEntity 并执行
bool ok = someEntity.ChangedOn.Equals(dt);
问题是 ok == false
而我期望 ok == true
。 :|
如何使 code first in entity framework 生成类型为 datetime2 的列而不是迁移中的 datetime?
解决方案
1) 添加一个类型为long的字段ChangedOn2。
2) 将 dt.Ticks 值保存到 ChangedOn2。
3) 比较
someEntity.ChangedOn2.Equals(dt.Ticks);
How to make code first in entity framework generate column of type
datetime2
instead ofdatetime
in migrations?
要指定要使用的列的类型,您可以将以下属性添加到模型的 属性 ChangedOn
中:
[Column(TypeName = "datetime2")]
或者,如果您使用的是 Fluent API,那么您可以将其添加到 DBContext
的 OnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// ...
modelBuilder.Entity<someEntity>()
.Property(p => p.ChangedOn)
.HasColumnType("datetime2");
// ...
}