C# 使用EntityFramework和MVC 5进行CRUD操作
我对EntityFramework、ASP.NET和MVC5比较陌生 从这里开始学习教程 我想通过添加电影演员的一对多关系来扩展它(也就是说,一个演员可以出现在许多电影中) 因此,我的模型文件夹中有以下代码: Actor.csC# 使用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;
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);
希望这有帮助。尝试删除数据库并重新生成它。我怀疑在您修改之前已经插入了数据