I have followed this guide to implement a many to many relationships in my API https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration
When I attempt to create a new Project entry, which contains a list of areas (selected from a predefined list) to be save to the ProjectAreas link table I get the following error: Cannot insert explicit value for identity column in table 'Area' when IDENTITY_INSERT is set to OFF.
public class Project
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ProjectId { get; set; }
public string ProjectName { get; set; }
public string ProjectDescription { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public DateTime CreateDate { get; set; }
public User CreatingUser { get; set; }
public bool Closed { get; set; }
public User ClosingUser { get; set; }
public DateTime CloseDate { get; set; }
public Customer Customer { get; set; }
public ICollection<ProjectArea> ProjectAreas { get; set; }
public ICollection<ProjectCategory> ProjectCategories { get; set; }
}
public class Area
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long AreaId { get; set; }
public string AreaName { get; set; }
public string Description { get; set; }
public bool Active { get; set; }
public User CreatingUser { get; set; }
public Customer Customer { get; set; }
public ICollection<ProjectArea> ProjectAreas { get; set; }
}
public class ProjectArea
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ProjectAreaId { get; set; }
[ForeignKey("Project")]
public long ProjectId { get; set; }
public Project Project { get; set; }
[ForeignKey("Area")]
public long AreaId { get; set; }
public Area Area { get; set; }
}
public class DatabaseContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProjectArea>().HasKey(projectArea => new { projectArea.ProjectId, projectArea.AreaId });
modelBuilder.Entity<ProjectArea>().HasOne(projectArea => projectArea.Project).WithMany(project => project.ProjectAreas).HasForeignKey(projectArea => projectArea.ProjectId);
modelBuilder.Entity<ProjectArea>().HasOne(projectArea => projectArea.Area).WithMany(area => area.ProjectAreas).HasForeignKey(projectArea => projectArea.AreaId);
}
public void Add(Project entity)
{
databaseContext.Project.Add(entity);
databaseContext.SaveChanges();
}
Can someone tell me what I am missing?
Change your OnModelCreating to this one:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProjectArea>()
.HasKey(projectArea => new
{
projectArea.ProjectId,
projectArea.AreaId
});
modelBuilder.Entity<Project>()
.HasMany(c => c.ProjectArea)
.WithRequired()
.HasForeignKey(c => c.ProjectId);
modelBuilder.Entity<Area>()
.HasMany(c => c.ProjectArea)
.WithRequired()
.HasForeignKey(c => c.AreaId);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.