SubSonic не сохранит обновленную запись с ActiveRecord? - PullRequest
2 голосов
/ 01 июня 2011

У меня немного уникальная структура базы данных, но я думаю, что запрос, который я пытаюсь сделать, не слишком необычен.

По сути, я создаю новую запись.Затем я сохраняю эту запись, затем немного обновляю 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 является уникальным первичным ключом.Поэтому мне нужно вставить запись, прежде чем я узнаю, что это такое

1 Ответ

0 голосов
/ 09 июня 2011

В итоге я изменил шаблоны T4 в SubSonic, чтобы это исправить.

В ActiveRecord.tt около строки 466 под функцией void Add(IDataProvider):

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

Я не заметил каких-либо странностей в этом изменении, и похоже на ошибку, что это не былоуже там, как есть.

...