SqlException:INSERT 语句与 FOREIGN KEY 冲突

问题描述 投票:0回答:1

我使用 ASP.NET Core 中的代码优先方法在 SQL Server 中创建了数据库。我的目的是建立一个简单的新闻网站。我有两个表,在其中一个表中创建新闻组,而在另一个表中则成功。我必须从我的表格中选择该新闻组并添加描述、照片等。

当我点击记录时,出现此错误:

SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_Pages_PageGroups_PageGroupGroupID”冲突。冲突发生在数据库“dbNews”、表“dbo.PageGroups”、列“GroupID”中。

我想这是针对依赖注入的主题,但我没有尝试。

using System.ComponentModel.DataAnnotations;

namespace toplern18.Models
{
    public class Page
    {
        [Key]
        public int PagrID { get; set; }

        [Display(Name = "عنوان گروه")]
        [Required(ErrorMessage = "لطفا{0} را وارد نمایید")]
        public int GroupID { get; set; }

        [Display(Name = "عنوان")]
        [Required(ErrorMessage = "لطفا{0} را وارد نمایید")]
        [MaxLength(250)]
        public string Title { get; set; }

        [Display(Name = "توضیح مختصر")]
        [Required(ErrorMessage = "لطفا{0} را وارد نمایید")]
        [MaxLength(350)]
        [DataType(DataType.MultilineText)]
        public string ShortDescription { get; set; }

        [Display(Name = "متن")]
        [Required(ErrorMessage = "لطفا{0} را وارد نمایید")]
        [MaxLength(400)]
        [DataType(DataType.MultilineText)]
        public string text { get; set; }

        [Display(Name = "بازدید")]
        public int visit { get; set; }

        [Display(Name = "تصویر")]
        public string ImageName { get; set; }

        [Display(Name = "اسلاید")]
        public bool ShowDlider { get; set; }

        [Display(Name = "تاریخ ایجاد")]
        public DateTime CreateDate { get; set; }

        //الان این اون یکه است
        public virtual PageGroup PageGroup { get; set; }

        public virtual List<PageComment> PageComment { get; set; }

        public Page()
        {
        }
    }
}

-------------

using System.ComponentModel.DataAnnotations;

namespace toplern18.Models
{
    public class PageGroup
    {
        [Key]
        public int GroupID { get; set; }

        [Display(Name = "عنوان گروه")]
        [Required(ErrorMessage = "لطفا{0} را وارد نمایید")]
        [MaxLength(150)]
        public string GroupTitle { get; set; }


        //رابطش با پیج یک به چند است  الان لیست اون چنده است
         public virtual List<Page> Page { get; set; } //برقراری رابطه

        public PageGroup()
        {
            //سازنده خالی
        }
    }
}
c# sql-server asp.net-core
1个回答
0
投票

当您配置实体关系而没有在 DbContext 中配置外键时,Entity Framework Core 会根据约定自动生成外键。例如,页表中的

PageGroupGroupID
这会在您插入数据时导致数据库错误。

解决方案:

您可以在DbContext中配置正确的外键关系:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     modelBuilder.Entity<Page>()
     .HasOne(p => p.PageGroup)
     .WithMany(pg => pg.Page)
     .HasForeignKey(p => p.GroupID)
     .IsRequired();

     base.OnModelCreating(modelBuilder);
}

© www.soinside.com 2019 - 2024. All rights reserved.