簡體   English   中英

SubSonic 不會使用 ActiveRecord 保存更新的記錄?

[英]SubSonic won't save an updated record with 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();
            }
        }
    }

所以..有什么問題? 我是否需要運行查詢並從數據庫中獲取 object 然后更新它? 還是我錯過了什么?

注意:我必須保存兩次,因為申請人 RID 是唯一的主鍵。 所以我必須先插入一條記錄才能知道它是什么

我最終修改了 SubSonic 的 T4 模板來解決這個問題。

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

        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();

我沒有注意到這種變化有任何奇怪之處,而且它似乎是一個錯誤,它還沒有按原樣存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM