2014-02-24 168 views
1

我要代表傳奇項聯賽中我的應用程序(後來我想的方式在這裏顯示出來:自我關係的實體框架

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

右側, 即作爲一個樹結構)。請注意,每個項目可能包含用於構建它的項目列表。

我已經實現了應用程序的第一個版本,現在我正在將數據移動到數據庫。我想了解一下實體框架。首先使用代碼,我宣佈我的課:

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

After a而我設法找到我的問題的解決方案 - 它在這裏:

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(); 
    } 
} 

在數據庫方面有創建了兩個表 - 存儲有關項目和第二個保持約物品之間的關係的信息之一。