Entity framework ef代码第一个多对多只保存现有项目的关系
我首先使用EF6代码来管理我的数据库。我有一个任务类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中,我不知道如何获得它。我做错了什么使我的关系无法持续?通过进一步
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);
}
}