【问题标题】:SubSonic won't save an updated record with ActiveRecord?SubSonic 不会使用 ActiveRecord 保存更新的记录?
【发布时间】:2011-06-01 19:31:19
【问题描述】:

我有一些独特的数据库结构,但我认为我正在尝试执行的查询并没有什么特别之处。

基本上,我创建了一条新记录。然后,我保存这条记录,然后更新一点 XML,然后用新的 XML 更新记录。我遇到了第二次保存没有任何作用的问题。

    var applicant = new Applicant();
    applicant.XmlData = "";
applicant.Save(); //save once and initiate the record
    data.RecordRID = applicant.ApplicantRID;
    applicant.XmlData = data.SerializeToXml();
    var c=applicant.GetDirtyColumns().Count; //this returns a count of 0
    applicant.Save(); //save twice to populate RecordRID

另外,作为参考,生成的XmlData 属性如下所示:

    public string XmlData
    {
        get { return _XmlData; }
        set
        {
            if(_XmlData!=value){
                _XmlData=value;
                var col=tbl.Columns.SingleOrDefault(x=>x.Name=="XmlData");
                if(col!=null){
                    if(!_dirtyColumns.Any(x=>x.Name==col.Name) && _isLoaded){ //_isLoaded is never set to true for either saves
                        _dirtyColumns.Add(col);
                    }
                }
                OnChanged();
            }
        }
    }

那么..有什么问题?我是否需要运行查询并从数据库中获取对象然后更新它?还是我错过了什么?

注意:我必须保存两次,因为 ApplyRID 是唯一的主键。所以我必须先插入一条记录才能知道它是什么

【问题讨论】:

    标签: c# subsonic subsonic-active-record


    【解决方案1】:

    我最终修改了 SubSonic 的 T4 模板来解决这个问题。

    在函数void Add(IDataProvider)下的第466行附近的ActiveRecord.tt中:

            var key=KeyValue();
            if(key==null){
                var newKey=_repo.Add(this,provider);
                this.SetKeyValue(newKey);
            }else{
                _repo.Add(this,provider);
            }
            SetIsNew(false);
            SetIsLoaded(true); //Added this line
            OnSaved();
    

    我没有注意到这个变化有任何奇怪之处,而且它似乎是一个错误,它还没有按原样存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多