【问题标题】:Entity framework: StoreGeneratedPattern="Computed" property实体框架:StoreGeneratedPattern="Computed" 属性
【发布时间】:2011-06-29 20:44:36
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    将此属性设置为 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
                }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2013-09-06
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多