sql - dbcontext.savechanges 始终保存默认值

标签 sql entity-framework azure

我有一个使用 Entity Framework 6.1、代码优先创建的 SQL-Azure 数据库。

我的“EmazeEvents”表中的“日期时间”字段是这样创建的:

datetime = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()")

并在代码中定义如下:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
[Index]
public DateTime datetime { get; set; }

我理解这意味着如果在插入时省略此字段,它将默认获得插入日期,确实如此。

但是,我在插入设置此字段的行时遇到问题。尽管我设置了适当变量的值,但它仍然将默认日期写入数据库。

一些代码提取: EmazeEvents 定义如下:

public class EmazeEvents:DbContext
    {
        public EmazeEvents()
            : base("EmazeEvent")
        { }

public DbSet<EmazeEvent> events { get; set; }
    }
}

我所做的是:

context = new EmazeEvents();
EmazeEvent e = new EmazeEvent();

// e.datetime does get the correct date
e.datetime = DateTime.ParseExact("2014-05-31T00:00:06.8900000", "O", CultureInfo.InvariantCulture);

context.events.Add(e);
context.SaveChanges();

写入数据库的记录具有当前日期时间,忽略 e.datetime 中的记录。

最佳答案

我发现问题出在“日期时间”字段的定义上。当我删除时:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 

它开始让我写入默认值以外的其他值。

关于sql - dbcontext.savechanges 始终保存默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126573/

相关文章:

c# - Entity Framework -> 从 DB 中一条一条地获取记录或一次获取它们。哪个更快?

c# - 在 LINQ 查询的选择部分调用方法

bash - Git 不使用 SSH key 对 Azure DevOps 进行身份验证

Azure辅助角色调用第3方命令行组件

c# - 如果使用 CreateResponse 扩展方法返回 Azure Function HttpResponseMessage,则执行测试时出错

sql - 直接通过 block 范围索引 (BRIN) 标识符查询 Postgres 表

Oracle 数据库中的 Java DAO 插入层

sql - SQL批量插入父子表的操作

c# - Automapper 为 T 类型初始化

android - 附近 "COLUMN_NAME": syntax error (code 1) in SQLite