gpt4 book ai didi

c# - SubSonic 不会使用 ActiveRecord 保存更新的记录?

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:33 24 4
gpt4 key购买 nike

我有一些独特的数据库结构,但我想我尝试做的查询并没有太不寻常。

基本上,我创造了一个新记录。然后,我保存这条记录,然后更新一些 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) 下的 ActiveRecord.tt 大约第 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();

我没有注意到这个变化有任何奇怪之处,它似乎是一个错误,它并没有像现在这样存在。

关于c# - SubSonic 不会使用 ActiveRecord 保存更新的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6206607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com