两个列表同步 [英] Two list synchronization
问题描述
我做的两个列表之间的同步。
的IList<事件> GoogleEvents
和表< myEvent> DB.Events;
I'm doing the synchronization between the two lists.
IList<Event> GoogleEvents
and Table<myEvent> DB.Events;
在谷歌方面我使用的这个
String Summary,
String Description,
EventDateTime Start,
EventDateTime End,
Event.RemindersData Reminders;
在数据库端像这样
< IMG SRC =http://i.stack.imgur.com/jcmEz.pngALT =分贝事件>
我的代码是这样的。
foreach (myEvent item in DB.Events)
{
if (item.GoogleID == "" || item.GoogleID == null)// i add event my db
{
//Add dbEvent to google and save id to googleid column
}
}
foreach (Event item in myGoogleCalendar.Items)
{
if (DB.Events.Where(o => o.GoogleID == item.Id).Count() == 0)// i add event google
{
//Add googleEvent to dbEvent
}
else
{
//This event also existing in two server
myEvent dbEvent = DB.Olaylar.Where(o => o.GoogleID == item.Id).First();
if(item.Updated.Value == dbEvent.UpdateTime) continue;//Same
if (item.Updated.Value > dbEvent.UpdateTime)
{
//Google event is new
}
else
{
//dbEvent is new
}
}
}
的有一个很大的问题的我忘了删除
我应该在哪里添加删除活动的一部分,怎么样?
Where should I add deleting events part and how ?
推荐答案
的问题是不执行删除同步,但认识到,该事件是否已在一个列表中被删除或添加到其他列表
The problem is not to implement a delete synchronization, but to recognize, whether the event has been deleted in one list or added to the other list.
我建议不要删除从DB.Events列表中的事件,而是将它们标记为删除。
I recommend not to delete events from the DB.Events list, but to mark them as deleted.
因此,你需要一个标志
bool IsDeleted = false;
在您键入 myEvent
。
在谷歌列表(我假设你使用的 https://developers.google.com/google-apps/calendar/v3/reference/events ),你没有这样的标志。所以,你的算法需要有点棘手。
In Google list (I assume you use https://developers.google.com/google-apps/calendar/v3/reference/events) you don't have such a flag. So your algorithm needs to be a bit tricky.
所以,如果你在谷歌列表需要首先同步
So you need the first synchronize from the Google list
foreach (Event item in myGoogleCalendar.Items)
{
if (DB.Events.Where(o => o.GoogleID == item.Id).Count() == 0)
{
// create new DB event from Google event, because since it is
// not in the DB.Events list, it has not been deleted there earlier,
// else there would be an event with IsDeleted=true
}
else
{
//This event exists in both
myEvent dbEvent = DB.Events.Where(o => o.GoogleID == item.Id).First();
if (dbEvent.IsDeleted)
{
// delete Google event, since the flag in DB.Events list shows that
// it existed earlier and has been deleted in DB.Events list.
}
else
{
if(item.Updated.Value == dbEvent.UpdateTime) continue;//Same
if (item.Updated.Value > dbEvent.UpdateTime)
{
// update DB event
}
else
{
// update Google event
}
}
}
}
然后你从同步DB.Events列表
Then your synchronize from your DB.Events list
foreach (myEvent item in DB.Events)
{
if (!item.IsDeleted && string.IsNullOrEmpty(item.GoogleID))
{
// Create new Google Event from DB event
}
else if (!item.IsDeleted && !string.IsNullOrEmpty(item.GoogleID))
{
// Mark DB event as deleted
item.IsDeleted = true;
}
}
这工作在场景
- 您创建DB事件
- 您创建谷歌事件
- 您可以在数据库中删除事件
- 您在谷歌删除事件
- You create an event in DB
- You create an event in Google
- You delete an event in DB
- You delete an event in Google
这篇关于两个列表同步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!