Deep Dark Souler 2020-02-26 12:53 采纳率: 50%
浏览 1092
已采纳

【小白紧急求助】MVC5使用update-database数据迁移时出现“System.InvalidOperationException: 序列不包含任何匹配元素”的错误如何解决?

这个错误是我使用update-database语句时报错的,我跟踪到错误发生的位置,但我解决不了这个问题,无论是删除数据库或者更改连接字符串都无济于事,当然实体模型和seed方法的相关语句我都确认过没有明显的错误。
虽然用代码插入数据时会报错,但是运行项目时增删改查都没有问题,目前好像可以放着不管,但可能会对我的后续开发产生阻碍,我的时间不多,希望能够尽快解决。
我去看了其他同类问题,情况都与我不同,一些解决方法也参考过了,实在没有办法,第一次发帖求助,希望大神们指点一下。非常感谢。

模型类:

public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]//主键值由用户提供, 而不是由数据库生成
        public int CourseID { get; set; }

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

        [Range(1, 3)]
        public int Level { get; set; }

        public int LanguageID { get; set; }

        //一对一导航
        public virtual Language Languages { get; set; }
        //一对多导航是集合属性
        public virtual ICollection<Enrollment> Enrollments { get; set; }
        public virtual ICollection<Instructor> Instructors { get; set; }
    }

seed方法里报错的部分:

var courses = new List<Course>
            {
                new Course {CourseID = 1050,
                                Title = "Chemistry",
                                Level = 3,
                                LanguageID = languages.Single( s => s.Name == "Engineering").LanguageID, 
                                Instructors = new List<Instructor>()/*将Instructors导航属性初始化为空集合。这样, 便可以使用Instructor Instructors.Add方法添加与此Course相关的实体。 如果未创建空列表, 则无法添加这些关系, 因为Instructors属性将为 null, 并且不Add具有方法。*/
                },
                new Course {CourseID = 4022,
                                Title = "Microeconomics",
                                Level = 3,
                  LanguageID = languages.Single( s => s.Name == "Economics").LanguageID,
                  Instructors = new List<Instructor>()
                },
                new Course {CourseID = 4041, 
                                Title = "Macroeconomics", 
                                Level = 3,
                  LanguageID = languages.Single( s => s.Name == "Economics").LanguageID,
                  Instructors = new List<Instructor>()
                },
                new Course {CourseID = 1045, 
                                Title = "Calculus", 
                                Level = 1,
                  LanguageID = languages.Single( s => s.Name == "Mathematics").LanguageID,
                  Instructors = new List<Instructor>()
                },
                new Course {CourseID = 3141, 
                                Title = "Trigonometry", 
                                Level = 1,
                  LanguageID = languages.Single( s => s.Name == "Mathematics").LanguageID,
                  Instructors = new List<Instructor>()
                },
                new Course {CourseID = 2021, 
                                Title = "Composition", 
                                Level = 2,
                  LanguageID = languages.Single( s => s.Name == "English").LanguageID,
                  Instructors = new List<Instructor>()
                },
                new Course {CourseID = 2042, 
                                Title = "Literature", 
                                Level = 2,
                  LanguageID = languages.Single( s => s.Name == "English").LanguageID,
                  Instructors = new List<Instructor>()
                },
            };
            courses.ForEach(s => context.Courses.AddOrUpdate(p => p.CourseID, s));
            context.SaveChanges();

报错提示:

System.InvalidOperationException: 序列不包含任何匹配元素
   在 System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
   在 MvcMovie.Migrations.Configuration.Seed(SchoolContext context) 位置 E:\MvcMovie\MvcMovie\Migrations\Configuration.cs:行号 82
   在 System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext context)
   在 System.Data.Entity.Migrations.DbMigrator.SeedDatabase()
   在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()
   在 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   在 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   在 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   在 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   在 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   在 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
序列不包含任何匹配元素
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-26 12:58
    关注

    你的代码中的某一行,调用Single的地方
    如果遇到没有where符合条件的数据,就会丢出这个异常。
    你需要加上一个判断,比如
    var query = ...where(...).SingleOrDefault();
    if (query == null) ... //没有元素,给一个默认值
    else ...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?