首先更新相关数据EF数据库

时间:2015-11-23 06:02:44

标签: entity-framework generics

这是我第一次在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上更新相关数据是否有更好的方法?感谢

1 个答案:

答案 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();