![](/img/trans.png)
[英]SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint
[英]Seeding data. SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint
我在 asp.net.core Entityframework 6,CodeFirst 方法中工作。 我相信我以錯誤的順序或錯誤的方式播種數據。 我對藝術家/作者/聲音/關聯名稱使用類似的方法。 我得到了與所有人類似的錯誤。
整個錯誤讀取為藝術家或作者 SqlException:INSERT 語句與 FOREIGN KEY 約束“FK_AssociatedNames_artistModels_ArtistModelArtistId”沖突。 沖突發生在數據庫“BookDB”、表“dbo.artistModels”的“ArtistId”列中。 保存模塊的正確方法是什么? 我首先閱讀了這篇文章 EF Code The INSERT statement conflicted with the FOREIGN KEY constraint這就是我認為我正在接近保存錯誤的地方。
編輯:我設法在另一個項目中重新創建了問題並得到了同樣的錯誤。
public class BookModel
{
[Key]
public int BookId { get; set; }
public ICollection<AssociatedNames>? AssociatedNames { get; set; }
public ICollection<AuthorModel>? Authormodels { get; set; }
}
public class AssociatedNames
{
[Key]
public int AssociatedNamesId { get; set; }
public string? nameString { get; set; }
public int? BookId{ get; set; }
public BookModel? bookModel { get; set; }
public int? AuthorId { get; set; }
public AuthorModel AuthorModel { get; set; }
}
public class AuthorModel
{
[Key]
public int AuthorID { get; set; }
public string Firstname { get; set; }
public ICollection<AssociatedNames>? AssociatedNames { get; set; }
public int? BookId { get; set; }
public BookModel? bookModel{ get; set; }
}
public class SeedData
{
private readonly UserManager<IdentityUser> userManager;
private readonly SignInManager<IdentityUser> signInManager;
private readonly BookDBContext bookDBContext;
public AuthorModel AuthorModels { get; set; }
public BookModel BookModels { get; set; }
public AssociatedNames _AssociatedNames { get; set; }
public SeedData(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager, BookDBContext bookDBContext)
{
this.userManager = userManager;
this.signInManager = signInManager;
this.bookDBContext = bookDBContext;
}
public async Task seedData()
{
var user = new IdentityUser
{
UserName = "TestUSer",
Email = "TestUser@hotmail.com",
};
var newAuthor = new AuthorModel { FirstName = "Charles" };
bookDBContext.AuthorModels.Add(newAuthor);
var newAss = new AssociatedNames { nameString = "Kallax" };
bookDBContext.AssociatedNames.Add(newAss);
var Newbook = new BookModel { BookName = "HelloWorld", AssociatedNames = new List<AssociatedNames> { newAss } };
bookDBContext.SaveChanges();
var result = await userManager.CreateAsync(user, "Test!112");
}
}
在 Program.cs 上
builder.Services.AddScoped<SeedData>();
static void SeedDatainitialize(IHost host)
{
var scopefactorty = host.Services.GetService<IServiceScopeFactory>();
using (var scope = scopefactorty.CreateScope())
{
var seed = scope.ServiceProvider.GetService<SeedData>();
seed.seedData().Wait();
}
}
上下文。
public class BookDBContext : IdentityDbContext
{
public BookDBContext(DbContextOptions<BookDBContext> options) : base(options)
{
}
public DbSet<AuthorModel> AuthorModels { get; set; }
public DbSet<AssociatedNames> AssociatedNames { get; set; }
public DbSet<BookModel> BookModels { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
我嘗試使用不同的 void 方法在不同的時間保存它們,因此它們是在不同的階段完全創建的。 然后將 object 添加到 collections。並重復。 不工作
所以我解決了它,我不確定為什么會這樣。 任一 EF 在鍵入正確的 FK 時都存在問題。
public class AssociatedNames
{
[Key]
public int AssociatedNamesId { get; set; }
public string? nameString { get; set; }
public int? BookModelId{ get; set; }
public BookModel? BookModels{ get; set; }
[ForeignKey("AuthorModel")]
public int? AuthorID { get; set; }
public AuthorModel AuthorModel { get; set; }
[ForeignKey("ArtistModel")]
public int? ArtistId { get; set; }
public ArtistModel ArtistModel { get; set; }
[ForeignKey("VoiceActorModel")]
public int? VoiceActorId { get; set; }
public VoiceActorModel VoiceActorModel { get; set; }
}
在我的 Model Creation 中,我添加了這些行。
modelBuilder.Entity<BookModel>().Navigation(e => e.Authormodels).AutoInclude();
modelBuilder.Entity<BookModel>().Navigation(e => e.ArtistModels).AutoInclude();
modelBuilder.Entity<BookModel>().Navigation(e => e.VoiceActors).AutoInclude();
我注意到當我編寫代碼時我在調用時沒有包含其他類,然后添加了 AssociatedNames。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.