c# - Entity Framework : StoreGeneratedPattern ="Computed" property

标签 c# sql-server-2005 entity-framework ado.net-entity-data-model

我有一个 DateTime 属性。我需要此属性的默认值为 DateTime.Now。然后我发现您可以在 SQL 中指定一个属性 StoreGeneratedPattern="Computed" 并将其设置为 (getdate())。这成功了。但我无法在代码中更改此属性。有时我需要将此属性更改为任何 DateTime 值。但是我的更改没有保存。

最佳答案

将此属性设置为 Computed 是在告诉 EF 您不能直接设置该值。你怎么能?此属性是为了计算列而存在的,根据定义,计算列不会保存回数据库。

不幸的是,EF 的“默认值”属性只能设置为编译时已知的值,因此不能设置为 DateTime.Now

此链接提供了一个不错的解决方法:

Setting the default value of a DateTime Property to DateTime.Now inside the System.ComponentModel Default Value Attrbute


您还可以在您的上下文中处理 SavingChanges 事件,并在其中添加默认值,但这只会在您实际调用 SaveChanges() 时发生,而不是在对象已创建。

    partial void OnContextCreated() {
        this.SavingChanges += new EventHandler(AccrualTrackingEntities_SavingChanges);
    }

    void AccrualTrackingEntities_SavingChanges(object sender, EventArgs e) {
        List<Invoice> Invoices = this.ObjectStateManager
            .GetObjectStateEntries(System.Data.EntityState.Added | System.Data.EntityState.Modified)
            .Select(entry => entry.Entity)
            .OfType<Invoice>().ToList();

        foreach(Invoice I in Invoices)
            if (I.EntityState == System.Data.EntityState.Added) {
                //set default values
            } else {
                //??  whatever
            }
    }

关于c# - Entity Framework : StoreGeneratedPattern ="Computed" property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042327/

相关文章:

c# - 默认模板的 MonoMac 构建错误

c# - foreach 中的 System.OutOfMemoryException 循环遍历 worsheet 行

c# - 如何将 ILogger<T> 依赖项注入(inject) ConfigureServices - .net core 2.0 中的服务

sql-server-2005 - 如何在 T-SQL 中将多行作为单行返回?

sql-server-2005 - 是否可以将表名传递到存储过程中并在没有 Exec 函数的情况下使用它?

entity-framework - Entity Framework 代码优先 - 复合主键上的导航属性

c# - 检查针对 SQL Server 数据库的 LINQ 查询

c# - 如何使用 XmlSerializer 将自定义值设置为 xml header 中的 xmlns

sql-server - 简单数学存储过程返回 NULL?

c# - 在没有 key : Unable to track an instance of type 'MyEntity' because it does not have a primary key 的情况下初始化 DbSet 时出错