我使用 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()
{
//سازنده خالی
}
}
}
当您配置实体关系而没有在 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);
}