2014-02-24 7 views
1

Я должен представлять Лигу Легенд Пункт в моем приложении (позже я хочу, чтобы отобразить их на пути, как здесь:самоотношение в Entity Framework

http://lol.gameguyz.com/sites/default/files/Item%20Shop_Recommended%20Items_FollowUp%20(1).jpg

справа, т.е. как древовидная структура). Обратите внимание, что каждый элемент может содержать список элементов, которые используются для его создания.

Я реализовал первую версию приложения, и теперь я работаю над перемещением данных в БД. Я хотел бы немного узнать о Entity Framework. Используя код первой, я объявил свой класс:

public class Item 
{ 
    public ItemID ID { get; set; } 
    public int Cost { get; set; } 
    public string Name { get; set; } 
    public string Path { get; set; } 
    public List<ItemID> Recipe { get; set; } 


    public Item() { } 

    public Item(ItemID id, int cost, string name, 
       string path, List<ItemID> recipe) 
    { 
     ID = id; 
     Cost = cost; 
     Name = name; 
     Path = path; 
     Recipe = recipe; 
    } 
} 

Но в нынешнем виде не содержит информацию о рецепте на всех (т.е. полученный дб имеет только 4 колонки - ID, стоимость, имя и путь Поскольку это отношение 0 ... n, в традиционной базе данных SQL мне нужно создать новую таблицу с парами SuperiorItem-ItemUsedToBuild. Есть ли лучший способ сделать это с использованием EF?

ответ

0

После в то время как мне удалось найти решение для моей проблемы - вот оно:

public class Item 
{ 
    public int ID { get; set; } 
    public int Cost { get; set; } 
    public string Name { get; set; } 
    public string Path { get; set; } 

    public virtual List<Item> Recipe { get; set; } 
} 

Затем в определении контекста требуется определить отношение. Как и в LoL, элемент может быть построен из многих других подпунктов и может использоваться как компонент многими другими элементами, это отношение «многие ко многим». Таким образом, контекст будет выглядеть следующим образом:

class DataContext : DbContext 
{ 
    public DbSet<Item> Items { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Item>() 
      .HasMany(item => item.Recipe) 
      .WithMany(); 
    } 
} 

На стороне базы данных есть две таблицы, созданные - один для хранения информации о товарах и второй, чтобы сохранить информацию об отношениях между пунктами.

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