2013-12-09 1 views
0

Я пытаюсь создать мини-проект в asp.NET MVC4, который имитирует небольшой игровой обзорный веб-сайт. Ничего захватывающего не происходит, я просто хотел разобраться с различными аспектами инструментов и языка.asp.Net MVC4 с двумя объектами базы данных ссылаются друг на друга

В настоящее время я думал о создании базы данных, чтобы связать жанры с ID, поэтому, когда я создаю набор базы данных игр, я могу ссылаться на игры по родным жанрам. Я использовал первый подход Code для создания моделей, но я не уверен, как правильно ссылаться на жанры, которые хранятся в виртуальной коллекции, так что если я создаю таблицу на основе жанра или таблицу на основе игры, правильно. Я просто изучаю этот подход MVC, поэтому прошу прощения, если моя терминология отключена.

public class GamingModels : DbContext 
{ 
    public DbSet<Games> GameDb { get; set; } 
    public DbSet<Genre> GenreDb { get; set; } 

    public GamingModels() 
     : base("DefaultConnection") 
    { } 


    public class Games { 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public string Summary { get; set;} 
     public int Rating { get; set; } 
     public virtual ICollection<Genres> Genres { get; set; } 
    } 

    public class Genre { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<Games> Games { get; set; } 
    } 
} 
+1

[Начал писать ответ, но это лучше] [1] [1]: http://stackoverflow.com/questions/7050404/create-code-first-many-to-many -with-Additional-fields-in-association-table – Nogusta

+0

Вы можете также рассмотреть подход Model First. Code First хорошо иметь весь ваш «исходный код» в одном месте, включая схемы базы данных, но многие вещи, которые тривиальны при создании вашей базы данных, сначала становятся довольно сложными и даже эзотерическими с использованием первого подхода кода. Создайте свои базы данных, используйте Entity Framework для рендеринга слоя DAL и от вас. Чтобы отслеживать изменения базы данных разработки, которые должны идти на производство, подумайте о том, как использовать инструмент Red Gates Sql Compare, стоимость каждого из которых составляет 300 лицензий. –

ответ

1

У вас есть промежуточная таблица, где можно сопоставить игры и жанры? Если нет, то вы можете попробовать этот подход:

Override метод OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Games>().HasMany(x=> x.Genres) 
     .WithMany(x => x.Games) 
     .Map(x => x.MapLeftKey("ID").MapRightKey("ID").ToTable("Genre")); 
    modelBuilder.Entity<Genre>().HasMany(x => x.Games) 
     .WithMany(x => x.Genres) 
     .Map(x => x.MapLeftKey("ID").MapRightKey("ID").ToTable("Games")); 
} 

Если у вас есть таблица, которая решает многие-ко-многим, то следуйте рекомендациям Nogusta в.

Смежные вопросы