首页新闻找找看学习计划

关于EF 多对多关系,更改已有实体间关系的问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2012-06-07 11:35

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

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之间建立关系。。。

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

alexstrasza的主页 alexstrasza | 初学一级 | 园豆:115
提问于:2012-05-31 09:41
< >
分享
所有回答(2)
0

你两个类都用了ICollection<xxx>互相引用,在数据中会生成第三张以这两个类的名称组合命令的表,你看一下,这个表里存放的就是这两个类的数据之间的关系!

hexllo | 园豆:405 (菜鸟二级) | 2012-05-31 10:08

这我知道,我问的是用EF怎么修改这个关系,我总不能用sql改这个表吧

支持(0) 反对(0) alexstrasza | 园豆:115 (初学一级) | 2012-05-31 10:24

@alexstrasza: 如果是主外键关系的话,不能用ICollection<xxx>,可以用 public virtual xxx Name{get;set;}这样,我给你看一个图吧,当时做的笔记,你认真看了就明白了.

支持(0) 反对(0) hexllo | 园豆:405 (菜鸟二级) | 2012-05-31 10:56
0

楼上的答非所问。。

我自己找到了问题所在,因为我的两组的实体没有被同一个dbcontext追踪,所以被一个dbcontext当成了新加实体。

只要Entry一下,追踪所有的实体就好了

alexstrasza | 园豆:115 (初学一级) | 2012-06-07 11:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册