繁体   English   中英

ASP.NET Core MVC web 应用程序在更新数据库时抛出错误

[英]ASP.NET Core MVC web app throws error while updating the database

我正在学习一门课程来学习上述框架来制作我的学校项目。 我有一个问题。 我在下面提供代码和问题。

using E_Commerce.Data.Enums;
using E_Commerce.Models;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Generic;
using System.Linq;

namespace E_Commerce.Data
{
    public class AppDbInitializer
    {
        public static void Seed(IApplicationBuilder applicationBuilder)
        {
            using (var ServiceScope = applicationBuilder.ApplicationServices.CreateScope())
            {
                var context = ServiceScope.ServiceProvider.GetService<AppDbContext>();

                context.Database.EnsureCreated();
                
                //Cinema
                if (!context.Cinemas.Any())
                {
                    context.Cinemas.AddRange(new List<Cinema>()
                    {
                        new Cinema()
                        {
                            Name = "Parliament Cinema Club",
                            Logo = "https://upload.wikimedia.org/wikipedia/tr/f/fd/Newparlies8.jpg",
                            Description =
                                "Parliament Sinema Kulübü, 1990'larda Star 1 kanalında, sinema filmlerinin her pazar gecesi televizyonda ilk kez gösterildiği sinema kuşağıdır. Jeneriğindeki Karla Bonoff tarafından seslendirilen All My Life parçası ve \"Parliament Sinema Kulübü, Pazar Gecesi Sineması'nı sunar.\" anonsuyla hafızalarda yer edinmiştir."
                        },
                        new Cinema()
                        {
                        Name = "Parliament Cinema Club2",
                        Logo = "https://upload.wikimedia.org/wikipedia/tr/f/fd/Newparlies8.jpg",
                        Description =
                            "Parliament Sinema Kulübü, 1990'larda Star 1 kanalında, sinema filmlerinin her pazar gecesi televizyonda ilk kez gösterildiği sinema kuşağıdır. Jeneriğindeki Karla Bonoff tarafından seslendirilen All My Life parçası ve \"Parliament Sinema Kulübü, Pazar Gecesi Sineması'nı sunar.\" anonsuyla hafızalarda yer edinmiştir."
                    }
                    });
                    context.SaveChanges();
                }

                //Actors
                if (!context.Actors.Any())
                {
                    context.Actors.AddRange(new List<Actor>()
                    {
                        new()
                        {
                            Name = "Cüneyt Arkın",
                            PicUrl =
                                "https://imgrosetta.mynet.com.tr/file/13311265/7b2270726f63657373223a7b2274797065223a2263726f70222c22636f6f7264696e61746573223a7b227831223a2230222c227931223a2230222c227832223a2230222c227932223a2230227d7d7d/1080xauto.jpg",
                            Bio =
                                "Cüneyt Arkın veya gerçek adıyla Fahrettin Cüreklibatır (d. 8 Eylül 1937), Türk sinema oyuncusu, senarist, yapımcı, yönetmen ve doktordur."
                        },
                        new()
                        {
                        Name = "Murat Arkın",
                        PicUrl =
                            "https://m.media-amazon.com/images/M/MV5BMGJhOTZhYmQtN2QwNy00M2I5LWE5YzQtYzVmNTNiZjRkYTQzXkEyXkFqcGdeQXVyNDg4MjkzNDk@._V1_.jpg",
                        Bio =
                            "Murat Arkın (gerçek adı: Murat Cüreklibatur; d. 4 Mayıs 1975, İstanbul), Türk oyuncudur. Sinemada canlandırdığı Malkoçoğlu karakteri ile tanınan Cüneyt Arkın'ın oğludur."
                    }
                    });
                    context.SaveChanges();
                }

                //Producers
                if (!context.Producers.Any())
                {
                    context.Producers.AddRange(new List<Producer>()
                    {
                        new()
                        {
                            Name = "Kerem Çatay",
                            PicUrl =
                                "https://imgrosetta.mynet.com.tr/file/13311265/7b2270726f63657373223a7b2274797065223a2263726f70222c22636f6f7264696e61746573223a7b227831223a2230222c227931223a2230222c227832223a2230222c227932223a2230227d7d7d/1080xauto.jpg",
                            Bio =
                                "Cüneyt Arkın veya gerçek adıyla Fahrettin Cüreklibatır (d. 8 Eylül 1937), Türk sinema oyuncusu, senarist, yapımcı, yönetmen ve doktordur."
                        },
                        new()
                        {
                            Name = "Kerem Çatay2",
                            PicUrl =
                                "https://imgrosetta.mynet.com.tr/file/13311265/7b2270726f63657373223a7b2274797065223a2263726f70222c22636f6f7264696e61746573223a7b227831223a2230222c227931223a2230222c227832223a2230222c227932223a2230227d7d7d/1080xauto.jpg",
                            Bio =
                                "Cüneyt Arkın veya gerçek adıyla Fahrettin Cüreklibatır (d. 8 Eylül 1937), Türk sinema oyuncusu, senarist, yapımcı, yönetmen ve doktordur."
                        }
                    });
                    context.SaveChanges();
                }

                //Movies
                if (!context.Movies.Any())
                {
                    context.Movies.AddRange(new List<Movie>()
                    {
                        new()
                        {
                            Name = "Saving Private Ryan",
                            PicUrl =
                                "https://m.media-amazon.com/images/M/MV5BZjhkMDM4MWItZTVjOC00ZDRhLThmYTAtM2I5NzBmNmNlMzI1XkEyXkFqcGdeQXVyNDYyMDk5MTU@._V1_FMjpg_UX1000_.jpg",
                            Description =
                                "Er Ryan'ı Kurtarmak (İngilizce: Saving Private Ryan), Steven Spielberg tarafından yönetilerek Robert Rodat tarafından yazılan, II. Dünya Savaşı konulu bir epik savaş filmidir.",
                            MovieCategory = MovieCategory.Action,
                            
                },
                        new()
                        {
                            Name = "Space Jam",
                            PicUrl =
                                "https://m.media-amazon.com/images/M/MV5BMDgyZTI2YmYtZmI4ZC00MzE0LWIxZWYtMWRlZWYxNjliNTJjXkEyXkFqcGdeQXVyNjY5NDU4NzI@._V1_.jpg",
                            Description =
                                "Space Jam, 1996 ABD yapımı bir animasyon filmdir. Başrolünde Michael Jordan, Bugs Bunny (seslendirme Billy West) ve diğer Looney Tunes karakterleri vardır. Filmin yapımcısı Ivan Reitman, yönetmeni Joe Pytka'dir.",
                            MovieCategory = MovieCategory.Animation,
                            
                        }
                    });
                    context.SaveChanges();
                }

                //Actors_Movies
                if (!context.Actors_Movies.Any())
                {
                    context.Actors_Movies.AddRange(new List<Actor_Movie>()
                    {
                        new Actor_Movie()
                        {
                           MovieId = 1,
                           ActorId = 1
                        },
                       
                    });
                    context.SaveChanges();
                }
                
            }
        }
    }
}

当我尝试运行该应用程序时,它指向电影创建最后一部分的SaveChanges function 并抛出以下内容:

Microsoft.EntityFrameworkCore.DbUpdateException: '更新条目时出错。 有关详细信息,请参阅内部异常。

SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_Movies_Cinemas_CinemaId”冲突。 冲突发生在数据库“CommerceDB”、表“dbo.Cinemas”、“Id”列中。

据我了解,我正在尝试制作具有相同 ID 的电影院放映的电影,但由于尚未创建具有该 ID 的电影院,因此我无法更新数据库。 我知道的太少了 SQL 我最好说我不知道。

所以我需要一个不包含任何手动 SQL 的解决方案。 除了我添加到列中的信息不同之外,我逐行遵循课程。 但我认为这不会导致问题。

这是我的数据库的图表:

在此处输入图像描述

这是迁移的代码:

// <auto-generated />
using System;
using E_Commerce.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;

namespace E_Commerce.Migrations
{
    [DbContext(typeof(AppDbContext))]
    [Migration("20211218061214_TryChangeFK")]
    partial class TryChangeFK
    {
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("Relational:MaxIdentifierLength", 128)
                .HasAnnotation("ProductVersion", "5.0.6")
                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

            modelBuilder.Entity("E_Commerce.Models.Actor", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Bio")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("PicUrl")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Actors");
                });

            modelBuilder.Entity("E_Commerce.Models.Actor_Movie", b =>
                {
                    b.Property<int>("ActorId")
                        .HasColumnType("int");

                    b.Property<int>("MovieId")
                        .HasColumnType("int");

                    b.HasKey("ActorId", "MovieId");

                    b.HasIndex("MovieId");

                    b.ToTable("Actors_Movies");
                });

            modelBuilder.Entity("E_Commerce.Models.Cinema", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Description")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("Logo")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Cinemas");
                });

            modelBuilder.Entity("E_Commerce.Models.Movie", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int>("CinemaId")
                        .HasColumnType("int");

                    b.Property<string>("Description")
                        .HasColumnType("nvarchar(max)");

                    b.Property<DateTime>("EndDate")
                        .HasColumnType("datetime2");

                    b.Property<int>("MovieCategory")
                        .HasColumnType("int");

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("PicUrl")
                        .HasColumnType("nvarchar(max)");

                    b.Property<double>("Price")
                        .HasColumnType("float");

                    b.Property<int>("ProducerId")
                        .HasColumnType("int");

                    b.Property<DateTime>("StartDate")
                        .HasColumnType("datetime2");

                    b.HasKey("Id");

                    b.HasIndex("CinemaId");

                    b.HasIndex("ProducerId");

                    b.ToTable("Movies");
                });

            modelBuilder.Entity("E_Commerce.Models.Producer", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Bio")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("PicUrl")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Producers");
                });

            modelBuilder.Entity("E_Commerce.Models.Actor_Movie", b =>
                {
                    b.HasOne("E_Commerce.Models.Actor", "Actor")
                        .WithMany("Actors_Movies")
                        .HasForeignKey("ActorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("E_Commerce.Models.Movie", "Movie")
                        .WithMany("Actors_Movies")
                        .HasForeignKey("MovieId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Actor");

                    b.Navigation("Movie");
                });

            modelBuilder.Entity("E_Commerce.Models.Movie", b =>
                {
                    b.HasOne("E_Commerce.Models.Cinema", "Cinema")
                        .WithMany("Movies")
                        .HasForeignKey("CinemaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("E_Commerce.Models.Producer", "Producer")
                        .WithMany("Movies")
                        .HasForeignKey("ProducerId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Cinema");

                    b.Navigation("Producer");
                });

            modelBuilder.Entity("E_Commerce.Models.Actor", b =>
                {
                    b.Navigation("Actors_Movies");
                });

            modelBuilder.Entity("E_Commerce.Models.Cinema", b =>
                {
                    b.Navigation("Movies");
                });

            modelBuilder.Entity("E_Commerce.Models.Movie", b =>
                {
                    b.Navigation("Actors_Movies");
                });

            modelBuilder.Entity("E_Commerce.Models.Producer", b =>
                {
                    b.Navigation("Movies");
                });
#pragma warning restore 612, 618
        }
    }
}

提前感谢要解决这个问题的人!

问题解决了。 我没有给它任何 Cinema 或 Producer Id 来连接。 例如,当我将 CinemaId=1, ProducerId=1 添加到新电影时,它就起作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM