简体   繁体   中英

MVC5 Sequence contains no matching element

I don't know what this error means. I'm suspecting it's this line

MVC4

UserID = users.Single(s => s.LastName == "Wan").UserID

to

MVC5

UserID = users.Single(s => s.LastName == "Wan").Id

because my application used to be MVC4 which means I needed to have a User.cs class which had UserID as the Primary key. After upgrading it to MVC5 with Identity my User.cs(ApplicationUser) needs to derive from IdentityUser. IdentityUser uses Id.

Sequence contains no matching element

System.InvalidOperationException: Sequence contains no matching element
   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
   at RecreationalServicesTicketingSystem.Migrations.Configuration.Seed(ApplicationDbContext context) in C:\Users\jwan\Documents\Visual Studio 2015\Projects\RecreationalServicesTicketingSystem\RecreationalServicesTicketingSystem\Migrations\Configuration.cs:line 80
   at System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext context)
   at System.Data.Entity.Migrations.DbMigrator.SeedDatabase()
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Sequence contains no matching element

Configuration.cs(Seed Method)

internal sealed class Configuration : DbMigrationsConfiguration<RecreationalServicesTicketingSystem.Models.ApplicationDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(ApplicationDbContext context)
    {
        var departments = new List<Department>
        {
            new Department { DepartmentID = 1, DepartmentName = "IT"},
            new Department { DepartmentID = 2, DepartmentName = "Menzit Admin" },
            new Department { DepartmentID = 3, DepartmentName = "Human Resources"},
            new Department { DepartmentID = 4, DepartmentName = "Mechanics" },
            new Department { DepartmentID = 5, DepartmentName = "Directors" },
            new Department { DepartmentID = 6, DepartmentName = "Operations"}

        };
        departments.ForEach(s => context.Departments.AddOrUpdate(p => p.DepartmentName, s));
        context.SaveChanges();


        var depots = new List<Depot>
        {
            new Depot { DepotID = 1, DepotName = "Porana"},
            new Depot { DepotID = 2, DepotName = "Far North"},
            new Depot { DepotID = 3, DepotName = "Horowhenua"},
            new Depot { DepotID = 4, DepotName = "Manawatu"},
            new Depot { DepotID = 5, DepotName = "Silverdale"},
            new Depot { DepotID = 6, DepotName = "Christchurch"},

        };
        depots.ForEach(s => context.Depots.AddOrUpdate(p => p.DepotName, s));
        context.SaveChanges();

        var users = new List<ApplicationUser>
    {
        //new ApplicationUser { FirstMidName = "Jason",   LastName = "Wan",
        //    EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1, DepotID = 1,IsAdministrator = true},
        new ApplicationUser {UserName = "adomagas@rs.kiwi.nz", FirstMidName = "Andy", LastName = "Domagas",
            EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1,DepotID = 1,IsAdministrator = true},
        new ApplicationUser {UserName = "ddjohar@rs.kiwi.nz", FirstMidName = "Denis",   LastName = "Djohar",
            EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1 ,DepotID = 1,IsAdministrator = true },
        new ApplicationUser {UserName = "cwest@rs.kiwi.nz", FirstMidName = "Christine",   LastName = "West",
            EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 2, DepotID = 3,IsAdministrator = false},

    };

        users.ForEach(s => context.Users.AddOrUpdate(p => p.FirstMidName, s));
        context.SaveChanges();

        users.ForEach(s => context.Users.AddOrUpdate(p => p.LastName, s));
        context.SaveChanges();



        var categories = new List<Category>
        {
            new Category {CategoryID = 0001, CategoryName = "Desktop"},
            new Category {CategoryID = 0002, CategoryName = "Mobile"},
            new Category {CategoryID = 0003, CategoryName = "Menzits"},
            new Category {CategoryID = 0004, CategoryName = "XMPRO"},
            new Category {CategoryID = 0005, CategoryName = "Con-X"},
            new Category {CategoryID = 0006, CategoryName = "Promapp"},
            new Category {CategoryID = 0007, CategoryName = "QGIS"},
        };
        categories.ForEach(s => context.Categories.AddOrUpdate(p => p.CategoryName, s));
        context.SaveChanges();

        var tickets = new List<Ticket>    <-- Line 80 ERROR
        {
            new Ticket {
                UserID = users.Single(s => s.LastName == "Wan").Id, //UserID
                CategoryID = categories.Single(c => c.CategoryName == "Con-X" ).CategoryID,
                Issue = ("Con-X Login Error"),
                Priority = Priority.High
            },
            new Ticket {
                UserID = users.Single(s => s.LastName == "Wan").Id, //UserID
                CategoryID = categories.Single(c => c.CategoryName == "Desktop" ).CategoryID,
                Issue = ("Can't remote access C0123"),
                Priority = Priority.Med
            },
        };


        foreach (Ticket e in tickets)
        {
            var ticketInDataBase = context.Tickets.Where(
                s =>
                    s.User.Id == e.UserID && //UserID
                    s.Category.CategoryID == e.CategoryID).SingleOrDefault();
            if (ticketInDataBase == null)
            {
                context.Tickets.Add(e);
            }
        }
        context.SaveChanges();

    }
}

}

Ticket.cs

public enum Priority
{
    Low, Med, High
}
public class Ticket
{
    public int? TicketID { get; set; }
    [Required(ErrorMessage = "Please enter the description")]
    public string Issue { get; set; }
    [Display(Name = "Administrator")]
    [Required(ErrorMessage = "Please select the Administrator")]
    public int IssuedTo { get; set; }
    public int Author { get; set; }

    [DisplayFormat(NullDisplayText = "No Priority")]
    public Priority Priority { get; set; }
    [ForeignKey("CategoryID")]
    public virtual Category Category { get; set; }
    public int CategoryID { get; set; }
    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual ApplicationUser User { get; set; }
}

ApplicationUser : IdentityUser

   public class ApplicationUser
    : IdentityUser<int, ApplicationUserLogin,
        ApplicationUserRole, ApplicationUserClaim>, IUser<int>
    {
        public async Task<ClaimsIdentity>
            GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager)
        {
            var userIdentity = await manager
                .CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            return userIdentity;
        }


        public bool IsAdministrator { get; set; }
        [StringLength(50, MinimumLength = 1)]

        public string LastName { get; set; }
        [StringLength(50, MinimumLength = 1, ErrorMessage = "First name cannot be longer than 50 characters.")]

        [Column("FirstName")]
        public string FirstMidName { get; set; }

        public string FullName
        {
            get { return FirstMidName + " " + LastName; }
        }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime EnrollmentDate { get; set; }
        public int DepartmentID { get; set; }
        [ForeignKey("DepartmentID")]
        public virtual Department Department { get; set; }
        public int DepotID { get; set; }
        [ForeignKey("DepotID")]
        public virtual Depot Depot { get; set; }
        public virtual ICollection<Ticket> Tickets { get; set; }
    }

It just means there is no data in your users table with the last name of Wan. Single throws an error if more than 1 exists or none exist. You have commented out the line that adds "Wan" to the users table, that's why you're getting the error.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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