Entity framework 如何通过模型和初始值设定项关联表
我希望能更好地理解如何将模型相互关联。我还在实体框架中使用种子数据。但是我认为它设置不正确,我不知道在哪里。当我尝试为公司运行索引时,我在关注公司列表时遇到了一个不太有用的错误。我是不是做错了什么?我现在迷路了 我的数据库设计很简单,从上到下都很简单——管理、公司、活动、创意 以下四个类保存为“我的模型”文件夹中的单个类Entity framework 如何通过模型和初始值设定项关联表,entity-framework,ef-code-first,Entity Framework,Ef Code First,我希望能更好地理解如何将模型相互关联。我还在实体框架中使用种子数据。但是我认为它设置不正确,我不知道在哪里。当我尝试为公司运行索引时,我在关注公司列表时遇到了一个不太有用的错误。我是不是做错了什么?我现在迷路了 我的数据库设计很简单,从上到下都很简单——管理、公司、活动、创意 以下四个类保存为“我的模型”文件夹中的单个类 public class Admin { public int AdminID { get; set; } public string FirstName {
public class Admin
{
public int AdminID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Company> Companys { get; set; }
public virtual ICollection<Campaign> Campaigns { get; set; }
public virtual ICollection<Idea> Ideas { get; set; }
}
public class Company
{
public int CompanyID { get; set; }
public int AdminID { get; set; }
public string CompanyName { get; set; }
public string Website { get; set; }
public string Description { get; set; }
public virtual ICollection<Campaign> Campaigns { get; set; }
public virtual ICollection<Idea> Ideas { get; set; }
}
public class Campaign
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CampaignID { get; set; }
public int CompanyID { get; set; }
public int AdminID { get; set; }
public string Description { get; set; }
public virtual Idea Idea { get; set; }
public virtual Company Company { get; set; }
}
然后是我的种子数据
protected override void Seed(CeptContext context)
{
var admins = new List<Admin>
{
new Admin{AdminID=1, FirstName="Bob",LastName="Test"},
new Admin{AdminID=2, FirstName="Fred",LastName="Tester"},
};
admins.ForEach(s => context.Admins.Add(s));
context.SaveChanges();
var companys = new List<Company>
{
new Company{AdminID=1, CompanyID=101, CompanyName="Test Company",Website="www.testcompany.com",Description="Test Company"},
new Company{AdminID=1, CompanyID=102, CompanyName="Big Company",Website="www.bigcompany.com",Description="big company"},
new Company{AdminID=2, CompanyID=103, CompanyName="Big Technologies",Website="www.bigtechnologies.com",Description="Big technologies"},
};
companys.ForEach(s => context.Companys.Add(s));
context.SaveChanges();
var campaigns = new List<Campaign>
{
new Campaign{AdminID=1, CompanyID=101, CampaignID=201, Description="New campaign"},
new Campaign{AdminID=1, CompanyID=101, CampaignID=202, Description="New campaign2"},
new Campaign{AdminID=1, CompanyID=102, CampaignID=203, Description="New campaign3"},
new Campaign{AdminID=2, CompanyID=103, CampaignID=204, Description="New campaign4"},
};
campaigns.ForEach(s => context.Campaigns.Add(s));
context.SaveChanges();
var ideas = new List<Idea>
{
new Idea{AdminID=1,CompanyID=101, CampaignID=201, IdeaID=301, Description="Big Idea", Rank=Rank.A},
new Idea{AdminID=1,CompanyID=101, CampaignID=202, IdeaID=302, Description="Tiny Idea", Rank=Rank.B},
new Idea{AdminID=1,CompanyID=102, CampaignID=203, IdeaID=303, Description="Idea to do great things", Rank=Rank.C},
new Idea{AdminID=1,CompanyID=102, CampaignID=203, IdeaID=304, Description="Even bigger things", Rank=Rank.B},
new Idea{AdminID=2,CompanyID=103, CampaignID=204, IdeaID=305, Description="Bad idea", Rank=Rank.C},
new Idea{AdminID=2,CompanyID=103, CampaignID=204, IdeaID=306, Description="Other Idea", Rank=Rank.A},
};
ideas.ForEach(s => context.Ideas.Add(s));
context.SaveChanges();
}
问题是什么?这些表是否正确相关,种子数据是否符合此关系?您不应该在层次结构中重复这些关键字段。感谢Gert,我觉得我在那里做错了什么,但我不确定如何关联它们,或者如何在种子数据中关联它们。
protected override void Seed(CeptContext context)
{
var admins = new List<Admin>
{
new Admin{AdminID=1, FirstName="Bob",LastName="Test"},
new Admin{AdminID=2, FirstName="Fred",LastName="Tester"},
};
admins.ForEach(s => context.Admins.Add(s));
context.SaveChanges();
var companys = new List<Company>
{
new Company{AdminID=1, CompanyID=101, CompanyName="Test Company",Website="www.testcompany.com",Description="Test Company"},
new Company{AdminID=1, CompanyID=102, CompanyName="Big Company",Website="www.bigcompany.com",Description="big company"},
new Company{AdminID=2, CompanyID=103, CompanyName="Big Technologies",Website="www.bigtechnologies.com",Description="Big technologies"},
};
companys.ForEach(s => context.Companys.Add(s));
context.SaveChanges();
var campaigns = new List<Campaign>
{
new Campaign{AdminID=1, CompanyID=101, CampaignID=201, Description="New campaign"},
new Campaign{AdminID=1, CompanyID=101, CampaignID=202, Description="New campaign2"},
new Campaign{AdminID=1, CompanyID=102, CampaignID=203, Description="New campaign3"},
new Campaign{AdminID=2, CompanyID=103, CampaignID=204, Description="New campaign4"},
};
campaigns.ForEach(s => context.Campaigns.Add(s));
context.SaveChanges();
var ideas = new List<Idea>
{
new Idea{AdminID=1,CompanyID=101, CampaignID=201, IdeaID=301, Description="Big Idea", Rank=Rank.A},
new Idea{AdminID=1,CompanyID=101, CampaignID=202, IdeaID=302, Description="Tiny Idea", Rank=Rank.B},
new Idea{AdminID=1,CompanyID=102, CampaignID=203, IdeaID=303, Description="Idea to do great things", Rank=Rank.C},
new Idea{AdminID=1,CompanyID=102, CampaignID=203, IdeaID=304, Description="Even bigger things", Rank=Rank.B},
new Idea{AdminID=2,CompanyID=103, CampaignID=204, IdeaID=305, Description="Bad idea", Rank=Rank.C},
new Idea{AdminID=2,CompanyID=103, CampaignID=204, IdeaID=306, Description="Other Idea", Rank=Rank.A},
};
ideas.ForEach(s => context.Ideas.Add(s));
context.SaveChanges();
}