我需要在我的应用程序中代表一个英雄联盟项目(后来我想以这里的方式显示它们:
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 :(得分: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();
}
}
在数据库端创建了两个表 - 一个用于存储有关项的信息,另一个用于保存项之间关系的信息。