EF Code First: как заполнять таблицы в отношениях «один ко многим»? - PullRequest
0 голосов
/ 10 ноября 2011

Вот моя модель

public class Movie
{
    public int MovieID { get; set; }

    public int GenreID { get; set; }

    [Required, StringLength(200)]
    public string Title { get; set; }

    public int MovieLength { get; set; }

    [Required, StringLength(1000)]
    public string MovieSummary { get; set; }

    public virtual Genre Genre { get; set; }

}

public class Genre
{
    public int GenreID { get; set; }
    public string GenreName { get; set; }

    public virtual IEnumerable<Movie> Movies { get; set; }
}

public class ZimelleShopDbContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }
    public DbSet<Genre> Genres { get; set; }
}

ScottGu написал Учебное пособие , в котором показано, как заполнять таблицу. Я хотел бы знать, как заполнить приведенный выше пример в случае этих двух таблиц в отношении «один ко многим».

Спасибо за помощь

EDIT

Я сделал это наоборот, и это сработало. Единственное, о чем я должен был позаботиться, - создать экземпляр ICollection.

public class Genre
{
    public Genre()
    {
        Movies = new List<Movie>();
    }

    //...
}

Тогда я сделал это

protected override void Seed(ZimelleShopDbContext context)
    {
        var genre = new Genre { GenreName = "Foo" };
        var movie = new Movie { Title = "Bar", MovieSummary = "Baz" };

        genre.Movies.Add(movie);
        context.Genres.Add(genre);
        context.SaveChanges();
    }

Это все еще работает.

1 Ответ

1 голос
/ 10 ноября 2011

Вам необходимо заменить IEnumerable<Movie> Movies на ICollection<Movie> Movies, потому что IEnumerable не является интерфейсом коллекции.

public class Genre
{
    public int GenreID { get; set; }
    public string GenreName { get; set; }

    public virtual ICollection<Movie> Movies { get; set; }
}

В вашем инициализаторе

protected override void Seed(ZimelleShopDbContext context)
{
     var genre = new Genre { GenreName = "Foo" };
     var movie = new Movies { Title = "Bar", MovieSummary = "Baz", Genre = genre };

     context.Movies.Add(movie);

     context.SaveChanges ();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...