SubSonic不会使用ActiveRecord保存更新的记录吗?



我有一个独特的数据库结构,但我想我尝试做的查询并不是太普通。

基本上,我创造了一个新的记录。然后,我保存这个记录,然后更新一些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();
            }
        }
    }

所以。。问题出在哪里?我需要运行查询并从数据库中获取对象,然后更新它吗?还是我错过了什么?

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

我最终修改了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();

我没有注意到这个变化有任何奇怪之处,而且它似乎是一个错误,因为它还没有出现。

最新更新