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 является уникальным первичным ключом. Поэтому я должен вставить запись, прежде чем я смогу узнать, что это такое
1 ответ
Я закончил тем, что модифицировал шаблоны 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();
Я не заметил каких-либо странностей от этого изменения, и кажется, что это ошибка, которой там уже не было.