3
我建立一個窗口服務,以從第三方API把所有的網絡和插入/更新這些網絡給我們的本地數據庫。這裏是我的實體:實體框架6同步表外源
public partial class Networks
{
public string networkID { get; set; }
public int organizationID { get; set; }
public string type { get; set; }
public string name { get; set; }
public string time_zone { get; set; }
public string tags { get; set; }
}
目前我通過API返回的所有網絡迭代,檢查ID是否存在,如果它檢查每一個領域,如果他們中的一個字段不匹配全部更新。
public void SyncNetworks()
{
List<Networks> all_networks = APICaller.GetNetworkList();
foreach(var network_from_api in all_networks)
{
var network_in_database = db.it_asset_meraki_networks.FirstOrDefault(
n => n.network_id == network_from_api.network_id);
if (network_in_database == null)
db.it_asset_meraki_networks.Add(network_in_meraki);
else
CheckAndSyncNetworkFields(network_from_api, network_in_database);
}
db.SaveChanges();
}
private void CheckAndSyncNetworkFields(Networks network_from_api, Networks network_in_database)
{
if(network_in_database.name != network_from_api.name
|| network_in_database.organizationID != network_from_api.organizationID
|| network_in_database.type != network_from_api.type
|| network_in_database.tags != network_from_api.tags
|| network_in_database.time_zone != network_from_api.time_zone)
{
network_in_database.name = network_from_api.name;
network_in_database.organizationID = network_from_api.organizationID;
network_in_database.type = network_from_api.type;
network_in_database.tags = network_from_api.tags;
network_in_database.time_zone = network_from_api.time_zone;
}
}
有沒有更有效的方法呢?我能以某種方式使用IsModfied或Attach功能嗎?
所以AddOrUpdate()將能夠認識到,如果即使被傳遞並沒有從實體框架起源對象存在的網絡見過? (爲了快速響應而使用了btw) – pieAre5quare