【问题标题】:EF Core Many-to-Many Relationship Identity Insert ErrorEF Core 多对多关系标识插入错误
【发布时间】:2019-05-01 19:51:00
【问题描述】:

我已按照本指南在我的 API https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration 中实现多对多关系

当我尝试创建一个新项目条目时,其中包含要保存到 ProjectAreas 链接表的区域列表(从预定义列表中选择),我收到以下错误:无法为标识列插入显式值当 IDENTITY_INSERT 设置为 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();
        }

谁能告诉我我错过了什么?

【问题讨论】:

  • 此错误意味着您正在尝试将值显式分配给数据库自动分配的列。

标签: c# entity-framework-core


【解决方案1】:

将您的 OnModelCreating 更改为这个:

 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);
}

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2018-06-02
    • 2019-01-19
    • 1970-01-01
    • 2018-06-24
    • 2017-10-26
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多