Код Первая миграция Entity Framework Seed Error

У меня возникают проблемы с запуском первой миграции кода с использованием структуры сущностей при заполнении информации. Я не могу понять, что я делаю неправильно. Вот ошибка, которую выдает мне консоль диспетчера пакетов, когда я запускаю update-database.

Running Seed method.
System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> 
System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Blogs_dbo.Statuses_StatusId". The conflict occurred in database "GregGoodwin", table "dbo.Statuses", column 'Id'.
The statement has been terminated.

Существует более крупная трассировка стека, которая не говорит мне намного больше. Во всяком случае, вот мой начальный код Configuration.cs.

var cat = new Category { CategoryTitle = "General", PostDate = DateTime.Now, Slug = "general" };
context.Categories.AddOrUpdate(cat);

var statusPub = new Status { StatusTitle = "Published", Slug = "published", PostDate = DateTime.Now };
context.Statuses.AddOrUpdate(statusPub);

var statusDraft = new Status { StatusTitle = "Draft", Slug = "draft", PostDate = DateTime.Now };
context.Statuses.AddOrUpdate(statusDraft);

var blogPost = new Blog
        {
            CategoryId = 1,
            AllowComments = true,
            PostDate = DateTime.Now,
            PostDescription = "Default post added to database",
            PostTitle = "Hello World",
            Slug = "hello-world",
            PostContent = "<p>Hello to the world</p>",
            StatusId = 1,
            Tags = "hello,world",
            ShortLink = "http://bit.ly/16Qt4wp"
        };
context.Blogs.AddOrUpdate(blogPost);

Теперь вот мои модели

Положение дел

[Table("Statuses")]
public class Status
{
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public string StatusTitle { get; set; }
    public string Slug { get; set; }
    [DataType(DataType.Date), Timestamp]
    public DateTime PostDate { get; set; }
}

Категория

[Table("Categories")]
public class Category
{
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public string CategoryTitle { get; set; }
    public string Slug { get; set; }
    [DataType(DataType.Date), Timestamp]
    public DateTime PostDate { get; set; }
}

Блог

[Table("Blogs")]
public class Blog
{
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public string PostTitle { get; set; }
    [Required]
    public string PostDescription { get; set; }
    [Required]
    public string PostContent { get; set; }
    public string Slug { get; set; }
    public string Tags { get; set; }
    public bool AllowComments { get; set; }
    public string ShortLink { get; set; }
    [DataType(DataType.Date), Timestamp]
    public DateTime PostDate { get; set; }

    public int StatusId { get; set; }
    public int CategoryId { get; set; }

    public virtual Category Category { get; set; }
    public virtual Status Status { get; set; }
}

Что я делаю неправильно? Заранее благодарю за любую помощь.

Изменить: просмотрев базу данных, я заметил, что категория добавляется, но статусы и запись в блоге отсутствуют, когда я запускаю семя.


person G_Man    schedule 12.04.2013    source источник
comment
Что такое AddOrUpdate? Это не метод Entity Framework.   -  person Erik Funkenbusch    schedule 12.04.2013
comment
@MystereMan да, это так.   -  person Kyle Trauberman    schedule 12.04.2013
comment
@KyleTrauberman - Нет, это не так. Однако я обнаружил, что это часть миграции. Не является частью самого EF. теги обновлены, чтобы отразить использование миграций   -  person Erik Funkenbusch    schedule 12.04.2013
comment
возможный дубликат EF AddOrUpdate Seed не обновляет дочерние объекты   -  person Erik Funkenbusch    schedule 12.04.2013


Ответы (2)


Скорее всего в таблице Статусов нет записи с Id 1. Мы не можем сказать, так как это столбец идентификаторов, и поэтому он не передается в свойстве Id. Поэтому попробуйте установить свойство навигации Status вместо StatusID, и оно должно правильно разрешаться при вызове SaveChanges():

var blogPost = new Blog
        {
            CategoryId = 1,
            ...
            Status = statusDraft,
            ...
        };
person Rich    schedule 12.04.2013

У меня была эта проблема, и вот мое решение. В этом нет ничего особенного, кроме проверки данных перед вставкой в ​​базу данных.

protected override void Seed(ApplicationDbContext context) {
        var gender = new[] { Gender.NotSpecified, Gender.Male, Gender.Female };
        var dbGender = context.Gender.ToList();
        for (byte i = 0; i < gender.Length; i++) {
            if (dbGender.FirstOrDefault(x => x.Name == gender[i]) != null) {
                context.Gender.Add(new Gender {
                    Id = i,
                    Name = gender[i]
                });
            }
        }
    }
person ebrahim.mr    schedule 17.09.2017