我实现了CRUD接口的UPDATE部分,并使用LiteDB来存储我的对象集合。
我存储的对象是Schedules,Schedule.ScheduleName是集合的索引。 Schedule.ScheduleName是该类型的[BsonId]。
我的更新方法非常简单:
public bool UpdateSchedule(Schedule schedule, string scheduleID)
{
return scheduleCollection.Update(scheduleID, schedule);
}
然而,这会做我期待的事吗?如果提供的计划对象中包含新名称,并且schjeduleID是旧名称,我希望它将在scheduleID下找到旧条目并使用新的Schedule对象中的任何内容进行更新。但是会吗?
如果是这样,那是否是正确的方式来实现CRUD的U部分?我有语义吗?我不能想到任何其他方式来重命名或更改和反对的ID!
答案 0 :(得分:0)
在LiteDB中不可能更改_id
值,因为此Update(BsonValue id, T entity)
用于在数据库中查找文档。
只有在序列化后实体(POCO类)没有_id
值时,才能使用此更新签名public bool Update(BsonValue id, T document)
{
if (document == null) throw new ArgumentNullException("document");
if (id == null || id.IsNull) throw new ArgumentNullException("id");
// get BsonDocument from object
var doc = _mapper.ToDocument(document);
// set document _id using id parameter
doc["_id"] = id;
return _engine.Value.Update(_name, new BsonDocument[] { doc }) > 0;
}
。
_id
原因是因为Row_Id
索引(PK)没有在更新命令中重新构建。如果与传统数据库(如SQL Server / Oracle)进行比较,则它们$.get( 'series-data.json', function( obj ) {
for(x in obj.data.series){
if(typeof obj.data.series[x].series_icon !='undefined'){
var series_icon = obj.data.series[x].series_icon;
var display_order = obj.data.series[x].display_order;
var brand = obj.data.series[x].brand;
var html = "<ul>";
html += "<li>"+ series_icon +"</li>";
html += "<li>"+ display_order +"</li>";
html += "<li>"+ brand +"</li>";
html += "</ul>";
$('#output').append(html);
}
}
},'json');
也无法更改。