2014-02-24 113 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(); 
    } 
} 

在数据库方面有创建了两个表 - 存储有关项目和第二个保持约物品之间的关系的信息之一。