Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework ef代码第一个多对多只保存现有项目的关系_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework ef代码第一个多对多只保存现有项目的关系

Entity framework ef代码第一个多对多只保存现有项目的关系,entity-framework,ef-code-first,Entity Framework,Ef Code First,我首先使用EF6代码来管理我的数据库。我有一个任务类 public class Task{ public Guid Id { get; set; } public ICollection<Timeframe> Timeframes { get; set; } } 但我的关系仍然没有持续下去。我找了一个RelationshipManager,通过它我可以手动将关系设置为added,但是如果它存在于EF6中,我不知道如何获得它。我做错了什么使我的关系无法持续?通过进一步

我首先使用EF6代码来管理我的数据库。我有一个任务类

public class Task{
    public Guid Id { get; set; }
    public ICollection<Timeframe> Timeframes { get; set; }
}
但我的关系仍然没有持续下去。我找了一个RelationshipManager,通过它我可以手动将关系设置为added,但是如果它存在于EF6中,我不知道如何获得它。我做错了什么使我的关系无法持续?

通过进一步研究,我能够使用System.Data.Entity.Infrastructure添加;并将我的持久性代码更改为

public void SaveTask(Task task)
{
    entities.Tasks.Attach(task);                
    var objectContext = ((IObjectContextAdapter)entities).ObjectContext;
    foreach (var tf in task.Timeframes)
    {
         entities.Timeframes.Attach(tf);
         objectContext.ObjectStateManager.ChangeRelationshipState(task, tf, t => t.Timeframes, EntityState.Added);
    }
}
我的关系终于维持了下来。我没想到这需要手动管理,但希望这能在同样的情况下帮助其他人

public void SaveTask(Task task)
{
    entities.Tasks.Attach(task);
    var timeframes = new List<Timeframe>();
    foreach (var tf in task.Timeframes)
    {
        entities.Timeframes.Attach(tf);
        timeframes.Add(tf);
    }
    entities.Entry(task).State = EntityState.Modified;
    task.Timeframes.Clear();
    timeframes.ForEach(t =>
    {
        task.Timeframes.Add(t);
    });
    entities.ChangeTracker.DetectChanges();

    entities.SaveChanges();
}
public void SaveTask(Task task)
{
    entities.Tasks.Attach(task);                
    var objectContext = ((IObjectContextAdapter)entities).ObjectContext;
    foreach (var tf in task.Timeframes)
    {
         entities.Timeframes.Attach(tf);
         objectContext.ObjectStateManager.ChangeRelationshipState(task, tf, t => t.Timeframes, EntityState.Added);
    }
}