我想知道在创建历史记录和依赖关系时,比较创建的对象状态并将对象状态更改为非活动状态(已删除)的最佳方法是什么。使用实体框架的最佳比较算法
这也意味着即时比较关系表(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