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
C# EF核心多对多未保存到联接表_C#_Entity Framework_.net Core_Many To Many - Fatal编程技术网

C# EF核心多对多未保存到联接表

C# EF核心多对多未保存到联接表,c#,entity-framework,.net-core,many-to-many,C#,Entity Framework,.net Core,Many To Many,我有以下课程 public class Travel { public int Id { get; set; } public string Location { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public List<Activity> Activities { get; set; } p

我有以下课程

public class Travel
{
    public int Id { get; set; }
    public string Location { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public List<Activity> Activities { get; set; }
    public List<ActivityTravel> ActivitityTravels { get; set; } = new List<ActivityTravel>();
}

public class Activity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ActivityTravel> ActivitityTravels { get; set; } = new List<ActivityTravel>();
}

public class ActivityTravel
{
    public int TravelId { get; set; }
    public Travel Travel { get; set; }
    public int ActivityId { get; set; }
    public Activity Activity { get; set; }
}
我的ApplicationDbContext看起来像这样

modelBuilder.Entity<ActivityTravel>()
        .HasKey(at => new { at.ActivityId, at.TravelId });

        modelBuilder.Entity<ActivityTravel>()
        .HasOne(at => at.Activity)
        .WithMany(a => a.ActivitityTravels)
        .HasForeignKey(at => at.ActivityId);

        modelBuilder.Entity<ActivityTravel>()
        .HasOne(at => at.Travel)
        .WithMany(t => t.ActivitityTravels)
        .HasForeignKey(at => at.TravelId);

    //outside of OnModelCreating
    public DbSet<Travel> Travels { get; set; }
    public DbSet<Activity> Activities { get; set; }
    public DbSet<ActivityTravel> ActivityTravels { get; set; }
用户可以使用许多现有活动添加新的旅行。但每次新的旅行被添加到上下文中时,ActivityTravel都没有添加任何内容。 下面是用于添加新旅行的代码


我遵循了这个问题中的示例

在处理其他内容之前,您不应该先将您需要的现有活动分离到它们,这样它们就不会作为重复项添加。大概是这样的:

public async Task<ActionResult> AddTravel([FromBody] Travel travel)
{   
    travel.Activities.ForEach(a => travel.ActivitityTravels.Add(new ActivityTravel() { Activity = a, Travel = travel }));
    _context.AttachRange(travel.Activities);
    _context.Travels.Add(travel);
    _context.SaveChanges();
    return Ok();
}

你试过不脱衣服吗?如果是-尝试仅添加ActivityTravels:_context.ActivityTravels.AddRangeTravels.ActivityTravels_上下文变化;尝试过了,但是ef尝试添加数据库中已经存在的活动,并抛出一个异常HH,您可以接收已经存在的内容。然后你需要先把它们连接起来。分离是个问题,先把它们连接起来会有帮助。谢谢我会加上作为答案。
public async Task<ActionResult> AddTravel([FromBody] Travel travel)
{   
    travel.Activities.ForEach(a => travel.ActivitityTravels.Add(new ActivityTravel() { Activity = a, Travel = travel }));
    _context.AttachRange(travel.Activities);
    _context.Travels.Add(travel);
    _context.SaveChanges();
    return Ok();
}