C# 使用EntityFramework和MVC 5进行CRUD操作

C# 使用EntityFramework和MVC 5进行CRUD操作,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,我对EntityFramework、ASP.NET和MVC5比较陌生 从这里开始学习教程 我想通过添加电影演员的一对多关系来扩展它(也就是说,一个演员可以出现在许多电影中) 因此,我的模型文件夹中有以下代码: Actor.cs namespace MvcMovie.Models { public class Actor { public int ActorId { get; set; } public String FirstName { get;

我对EntityFramework、ASP.NET和MVC5比较陌生

从这里开始学习教程

我想通过添加电影演员的一对多关系来扩展它(也就是说,一个演员可以出现在许多电影中)

因此,我的模型文件夹中有以下代码:

Actor.cs

namespace MvcMovie.Models
{
    public class Actor
    {
        public int ActorId { get; set; }
        public String FirstName { get; set; }
        public String Address { get; set; }

        public ICollection<Movie> Movies { get; set; }
    }
}
namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }

        [StringLength(60, MinimumLength = 3)]
        public string Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
        public DateTime ReleaseDate { get; set; }

        [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
        [Required]
        [StringLength(30)]
        public string Genre { get; set; }

        [Range(1, 100)]
        [DataType(DataType.Currency)]
        public decimal Price { get; set; }

        [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
        [StringLength(5)]
        public string Rating { get; set; }

        public int ActorId { get; set;}
        public Actor Actor { get; set; }
    }
}
namespace MvcMovie.Models
{
    public class MovieDBContext : DbContext
    {
        public DbSet<Actor> Actors { get; set; }
        public DbSet<Movie> Movies { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Actor>().HasKey(p => p.ActorId);
            modelBuilder.Entity<Actor>().Property(c => c.ActorId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<Movie>().HasKey(m => m.ID);
            modelBuilder.Entity<Movie>().Property(m => m.ID)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<Movie>().HasRequired(p => p.Actor)
                .WithMany(m => m.Movies)
                .HasForeignKey(m => m.ActorId);
            base.OnModelCreating(modelBuilder);
        }
    }
}
MovieDBContext.cs

namespace MvcMovie.Models
{
    public class Actor
    {
        public int ActorId { get; set; }
        public String FirstName { get; set; }
        public String Address { get; set; }

        public ICollection<Movie> Movies { get; set; }
    }
}
namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }

        [StringLength(60, MinimumLength = 3)]
        public string Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
        public DateTime ReleaseDate { get; set; }

        [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
        [Required]
        [StringLength(30)]
        public string Genre { get; set; }

        [Range(1, 100)]
        [DataType(DataType.Currency)]
        public decimal Price { get; set; }

        [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
        [StringLength(5)]
        public string Rating { get; set; }

        public int ActorId { get; set;}
        public Actor Actor { get; set; }
    }
}
namespace MvcMovie.Models
{
    public class MovieDBContext : DbContext
    {
        public DbSet<Actor> Actors { get; set; }
        public DbSet<Movie> Movies { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Actor>().HasKey(p => p.ActorId);
            modelBuilder.Entity<Actor>().Property(c => c.ActorId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<Movie>().HasKey(m => m.ID);
            modelBuilder.Entity<Movie>().Property(m => m.ID)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<Movie>().HasRequired(p => p.Actor)
                .WithMany(m => m.Movies)
                .HasForeignKey(m => m.ActorId);
            base.OnModelCreating(modelBuilder);
        }
    }
}
并获取以下错误: ALTER TABLE语句与外键约束“FK_dbo.Movies_dbo.Actors_ActorId”冲突。冲突发生在数据库“MOVIES_bd6a468e283a4100b6021adaf9911f7d”表“dbo.Actors”列“ActorId”中

我觉得这与我的数据种子(configuration.cs文件内部)有关

有人能告诉我正确的方向吗。谢谢

ps:我有MovieController和它相应的视图设置(从前面的步骤,我做了如教程所示)

除了Mak的回答之外:

本文还包含有用的帮助,特别是在添加迁移和更新数据库部分


在您的onmodel创作中,以下几行内容表示,电影中需要演员

modelBuilder.Entity<Movie>().HasRequired(p => p.Actor)
            .WithMany(m => m.Movies)
            .HasForeignKey(m => m.ActorId);

希望这有帮助。

尝试删除数据库并重新生成它。我怀疑在您修改之前已经插入了数据