这是我第一次在EF上更新表格的相关数据。
var _agent = _unitOfWork.AgentsRepository.GetByID(agent.AgentId);
_agent.map_Agent_Language = new System.Collections.Generic.HashSet<map_Agent_Language>();
var numlist = new System.Collections.Generic.List<int>() { 1,2,3,4,5};
foreach (var item in numlist)
{
_agent.map_Agent_Language.Add(new map_Agent_Language() { AgentLanguageId = 0, AgentId = agent.AgentId, LanguageId = Convert.ToInt32(item) });
}
_unitOfWork.AgentsRepository.Update(_agent);
int result = _unitOfWork.Save();
return (result > 0);
这些是使用的方法。
public virtual void Update(TEntity entityToUpdate)
{
dbSet.Attach(entityToUpdate);
context.Entry(entityToUpdate).State = EntityState.Modified;
}
public int Save()
{
return _context.SaveChanges();
}
编辑:
此代码在表map_agent_language上插入数据,而不是在插入新数据之前删除旧数据。
如何在插入之前强制EF删除它?
TNX ..
ps首先在db上更新相关数据是否有更好的方法?感谢
答案 0 :(得分:1)
基本上,您应首先通过AgentID获取旧数据,并仅添加所需的新数据并删除不需要的数据
实施例
repo.GetQuery().Where(r => r.AgentId == AgentId && !numlist .Contains(r.LanguageId )).Delete();
然后添加
foreach (int item in numlist)
{
if (!existing.Contains(item ))
{
var toAdd = new map_Agent_Language
{
... The properties to set
};
repo.AddObject(toAdd);
}
}
repo.SaveChanges();