c# - Entity Framework 中的代码首先设置列以在 sql server 中键入 datetime2

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

我有一个值(value)

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.5830000”

我用手动发现的

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

我从数据库加载 someEntity 并执行

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

问题是当我期望 ok == trueok == false。 :|

如何使 Entity Framework 中的代码优先生成类型为 datetime2 的列而不是迁移中的 datetime?

最佳答案

How to make code first in entity framework generate column of type datetime2 instead of datetime in migrations?

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

[Column(TypeName = "datetime2")]

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

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

    // ...

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

    // ...
}

关于c# - Entity Framework 中的代码首先设置列以在 sql server 中键入 datetime2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37025216/

相关文章:

c# - 如何在字符串中自动显示类的所有属性及其值?

SQL - 将逗号分隔的字符串转换为单独的行后更新表

c# - Entity Framework : Eager Loading Navigation Properties of Inherited Entities

c# - 尝试对顶部未选中项目的 ListView 进行排序,然后按 ID : compare routine throws an odd exception

c# - 将零件渲染到 Orchard CMS 中的不同区域

sql-server - 向 SQL 存储过程或函数添加或读取版本号

c# - UnitOfWork 模式是否会在 EF 应用程序中增加值(value)?

c# - 另一个 "There is already an open DataReader associated......"

javascript - 检查函数是否在 Ajax 和 WebMethod 中返回任何数据

sql - 选择某一列上具有 MAX() 值的行