【发布时间】:2016-05-09 11:54:02
【问题描述】:
我正在学习 asp.net mvc 应用程序中的实体框架。我有 3 个模型 -
AppModel、CategoryModel 和 App_CategoryModel(指定 AppModel 和 CategoryModel 之间的多对多关系)。一个sn-p是:
public class CategoryModel
{
[Key]
public int id { get; set; }
public string Name {get; set; }
public virtual ICollection<App_CategoryModel> mapping { get; set; }
}
public class AppModel
{
[Key]
public int id { get; set; }
public string Name { get; set; }
public virtual ICollection<App_CategoryModel> mapping { get; set; }
}
public class App_CategoryModel
{
[Key]
public int id {get; set;}
public int AppId {get; set; }
public int CategoryId {get; set; }
public virtual AppModel App {get; set;}
public virtual CategoryModel Category {get; set;}
}
我遵循“代码优先”的方法,并且成功创建了表。但是,现在我被困在如何填充和显示这些信息上。
我有以下输入数据:
List<AppModel>
List<CategoryModel> 和 Dictionary<"appname", List<CategoryModel>>
如何从这里继续,以便更新映射表?
另外,想了解这是否是表示数据的正确方法。由于一个应用程序可以有多个类别 - 我希望输出是一组独特的应用程序以及每个应用程序的类别列表,例如:
Dictionary<AppModel, List<CategoryModel>>
编辑: 这是我根据 smoksnes 的建议尝试的方法-
List<CategoryModel> cat_list = new List<CategoryModel>();
CategoryModel c1 = new CategoryModel();
c1.Name = "string1";
cat_list.Add(c1);
CategoryModel c2 = new CategoryModel();
c2.Name = "string2";
cat_list.Add(c2);
List<AppModel> app_list = new List<AppModel>();
AppModel a1 = new AppModel();
a1.Name = "app1";
app_list.Add(a1);
AppModel a2 = new AppModel();
a2.Name = "app2";
app_list.Add(a2);
a1.mapping.Add(c1);
a1.mapping.Add(c2);
a2.mapping.Add(c1);
a2.mapping.Add(c2);
db.categories.AddRange(cat_list);
db.apps.AddRange(app_list);
db.SaveChanges();
在此之后,EF 担任专家 - 2 个类别、2 个应用程序和 4 个映射表中的条目。
虽然这有效,但不确定是谁阻止 EF 为类别创建 4 个条目?
【问题讨论】:
-
你需要
App_CategoryModel类吗?如果在CategoryModel中使用ICollection<AppModel>,在AppModel中使用ICollection<CategoryModel>,EF不会生成中间表吗?
标签: c# entity-framework ef-code-first