我想知道在創建歷史記錄和依賴關係時,比較創建的對象狀態並將對象狀態更改爲非活動狀態(已刪除)的最佳方法是什麼。使用實體框架的最佳比較算法
這也意味着即時比較關係表(MarketCookies)內的過去和現在的對象。
Id | CookieID | MarketID
我發現的醜陋的解決方案是計算有多少物體有變化。
爲此讓打電話過去的項目:ListP
而新的項目:LISTF
我分這個方法分爲三步:
1 - 計數兩個列表;
2 - 查找ListP中不存在於List F中的對象,並將其狀態更改爲Inactive並更新它們;
3 - 創建新對象並保存它們。
但是這段代碼很難維護..我怎樣才能使一個簡單的代碼來維護和保持功能?
市場莫代爾:
public class Market()
{
public ICollection<Cookie> Cookies {get; set;}
}
餅乾模態:
public class Cookie()
{
public int Id {get;set;}
//Foreign Key
public int CookieID {get;set}
//Foreign Key
public int MarketID {get;set;}
}
代碼:
public void UpdateMarket (Market Market, int Id)
{
var ListP = MarketCookiesRepository.GetAll()
.Where(x => x.MarketID == Id && Market.State != "Inactive").ToList();
var ListF = Market.Cookies.ToList();
int ListPCount = ListP.Count();
int ListFCount = ListF.Count();
if(ListPCount > ListFCount)
{
ListP.Foreach(x =>
{
var ItemExists = ListF.Where(y => y.Id == x.Id).FirstOrDefault();
if(ItemExists == null)
{
//Delete the Object
}
});
ListF.Foreach(x =>
{
var ItemExists = ListP.Where(y => y.Id == x.Id).FirstOrDefault();
if(ItemExists == null)
{
//Create Object
}
});
}
else if(ListPCount < ListFCount)
{
ListF.Foreach(x =>
{
var ItemExists = ListP.Where(y => y.Id == x.Id).FirstOrDefault();
if(ItemExists == null)
{
//Create Objects
}
});
ListP.Foreach(x =>
{
var ItemExists = ListF.Where(y => y.Id == x.Id).FirstOrDefault();
if(ItemExists == null)
{
//Delete Objects
}
});
}
else if(ListPCount == ListFCount)
{
ListP.Foreach(x =>
{
var ItemExists = ListF.Where(y => y.Id == x.Id).FirstOrDefault();
if(ItemExists == null)
{
//Delete Objects
}
});
ListF.Foreach(x =>
{
var ItemExists = ListP.Where(y => y.Id == x.Id).FirstOrDefault();
if(ItemExists == null)
{
//Create Objects
}
});
}
}
看看設置專門的包含,並添加方法。看到https://msdn.microsoft.com/en-us/library/bb359438(v=vs.110).aspx –
你可以簡單地做一個除了選擇語句,它具有相同的功能?或者我理解錯了什麼? – DevilSuichiro