none
EF多对多关系,如何修改已有实体间的关系 RRS feed

  • 问题

  • 我有如下两个实体类,多对多关系

    public class Task : Entity
    {      
    
            public virtual ICollection<Person> Assignees { get; set; }
    
           
    }
        public class Person : Entity
        {
          
            public virtual ICollection<Task> AcceptedTasks { get; set; }
    
        }

    以下的mapping代码

     

                HasMany(t => t.Assignees).WithMany(p => p.AcceptedTasks).Map(m =>
                {
                    m.MapLeftKey("TaskId").MapRightKey("PersonId").ToTable("Person_AcceptedTask");
                });

     

    一下是出问题的方法:

     public void DesignateTask(Domain.Model.Task task, IEnumerable<Domain.Model.Person> persons, Domain.Model.Person charge = null)
            {
                try
                {
                    if (charge == null || charge.IsTransient())
                    {
                        charge = persons.FirstOrDefault();
                    }
    
                    if (!charge.IsTransient())
                    {
                        if (task.Assignees == null)
                            task = TaskRepository.GetTaskWithAssignees(task.Id);
    
                        TaskRepository.TrackItem(task);//call:Entry<TEntity>(item).State = System.Data.EntityState.Unchanged;
                        task.InChargeId = charge.Id;
                        foreach (var p in persons)
                        {
                            if (p != null)
                                task.Assignees.Add(p);
                        }
    
                        TaskRepository.UnitOfWork.Commit();//call:SaveChanges();
                    }
    
                }
                catch (Exception)
                {
                    TaskRepository.UnitOfWork.Rollback();
                    throw;
                }
            }

     

    参数传入的task和persons都是已经存在数据库里的实体。我只是想在这些实体之间建立关系(原本没有关系),上面的代码却会在数据库里插入一组和persons字段值一样的对象,在新对象和task之间建立关系。。。

    请问应该如何修改已有实体间的关系呢?

    2012年5月31日 2:32

答案

  • 您好,我不太明白您出问题的这个方法,一般情况下,我们在两个已有实体见创建关系,会先把两个实体查询出来,然后把其中一个实体赋给另一个实体的导航属性,最后调用SaveChanges方法来进行保存。关于多对多关系,可一个把一个实体加入到另一个实体的导航属性集合中去,最后调用SaveChanges方法来保存。

    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月3日 14:39
    版主

全部回复

  • 您好,我不太明白您出问题的这个方法,一般情况下,我们在两个已有实体见创建关系,会先把两个实体查询出来,然后把其中一个实体赋给另一个实体的导航属性,最后调用SaveChanges方法来进行保存。关于多对多关系,可一个把一个实体加入到另一个实体的导航属性集合中去,最后调用SaveChanges方法来保存。

    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月3日 14:39
    版主
  • 那请问多对多实体之间的关系如何修改呢?

    比如重新重新创建关系,或者对关系进行修改。让它引用另外一个记录。

    看了一个deleteobject。但是这个删除貌似会直接把实体 给删除了

    这明显不合逻辑啊。

    我只是 想修改多对多关系。但是不删除实体啊。

    2012年6月15日 18:07
  • 那请问多对多实体之间的关系如何修改呢?

    比如重新重新创建关系,或者对关系进行修改。让它引用另外一个记录。

    看了一个deleteobject。但是这个删除貌似会直接把实体 给删除了

    这明显不合逻辑啊。

    我只是 想修改多对多关系。但是不删除实体啊。

    2012年6月15日 18:08