Error Seeding Database? (MVC 4 Application, EF 5,

2019-08-31 08:45发布

I've successfully added a new migration in my project, but when I run update-database in Package Manager Console I receive: Error Seeding Privileges: An error occurred while updating the entries. See the inner exception for details..

Full Details:

PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Running Seed method.
System.Exception: Error Seeding Privileges: An error occurred while updating the entries. See the inner exception for details.
   at PersonalPortfolio.Migrations.Configuration.Seed(PortfolioContext context) in c:\James-Projects\TRAINING\PersonalPortfolio\PersonalPortfolio\Migrations\Configuration.cs:line 56
   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)

Below is my Privileges seed method:

namespace PersonalPortfolio.Migrations
{
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using PersonalPortfolio.Models;

    internal sealed class Configuration : DbMigrationsConfiguration<PersonalPortfolio.DAL.PortfolioContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(PersonalPortfolio.DAL.PortfolioContext context)
        {
            // The different Privileges a Visitor can have
            #region Privileges
            try
            {
                var privileges = new List<Privileges>
                {
                    new Privileges { Privilege = "Root" },              // ME
                    new Privileges { Privilege = "Admin" },             // Admin
                    new Privileges { Privilege = "Outsider" },          // Random Net Visitor
                    new Privileges { Privilege = "Client" },            // Tommy Peterson, Joe Dorris, Jim Dorris
                    new Privileges { Privilege = "Client Primary" }     // Joe Dorris, Jim Dorris
                };

                foreach (Privileges priv in privileges)
                {
                    var recordInDb = context.Privileges.Where(p => p.Privilege == priv.Privilege).FirstOrDefault();
                    if (recordInDb == null)
                    {
                        context.Privileges.Add(priv);
                    }
                }
                context.SaveChanges();
            }
            catch (Exception ex)
            {
                throw new Exception("Error Seeding Privileges: " + ex.InnerException.Message);
            }
            #endregion
        }
    }
}

Anyone have ideas for how to fix this?

1条回答
在下西门庆
2楼-- · 2019-08-31 09:10

What does your Privileges class look like? I'm guessing that your primary key isn't called 'Id', which is what EF expects in order to automatically create it as an identity column. If this is the case then you'll need to rename it to 'Id' or use the [Key] annotation to specify your own primary key name.

public class Privileges
    {
        public int Id { get; set; }
        ...

or

public class Privileges
    {
        [Key]
        public int MyId { get; set; }
         ...
查看更多
登录 后发表回答