重命名对象,或更改它的主键(_id)值

时间:2017-11-10 00:04:04

标签: c# linq crud litedb

我实现了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!

1 个答案:

答案 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'); 也无法更改。