我不知道这个错误意味着什么。我怀疑它是这条线
MVC4
UserID = users.Single(s => s.LastName == "Wan").UserID
到
MVC5
UserID = users.Single(s => s.LastName == "Wan").Id
因为我的应用程序曾经是MVC4,这意味着我需要有一个User.cs类,其中UserID作为主键。使用Identity将其升级到MVC5后,我的User.cs(ApplicationUser)需要从IdentityUser派生。 IdentityUser使用Id。
序列不包含匹配元素
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(种子方法)
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; }
}
答案 0 :(得分:2)
这只表示您的用户表中没有姓氏为Wan的数据。如果存在多于1或不存在,则单个抛出错误。您已注释掉了将“Wan”添加到users表的行,这就是您收到错误的原因。