所以我相信我搞砸了我的初始模型,错过了ID和外键属性。 无论如何,实体框架已经解决了这个问题....但现在我想修复我的模型以正确反映这一点。
最初我的模特是: -
public Season
{
public int SeasonId {get; set;}
public int Year {get; set;}
public virtual ICollection<MatchFixture> MatchFixtures {get; set;}
}
public MatchFixture
{
public int MatchFixtureId {get; set;}
public int Round {get; set;}
public string HomeTeam {get; set;}
public string AwayTeam {get; set;}
}
现在我相信我应该让MatchFixture具有属性,因此它指向包含它的Season,将以下属性添加到MatchFixture。
public int SeasonId {get; set;}
public Season Season {get; set;}
但问题是我的数据库已在我的MatchFixtures中有一个名为Season_SeasonId的列。这是一个可以为空的整数列,显然来自我在Season中的包含集合。如果我最初在MatchFixture中拥有上面的属性,那么该列将被称为SeasonId,并且是不可为空的整数列。
我想要的是将该列中的值传输到我的新列....
答案 0 :(得分:0)
您可以一步完成,但您需要首先确保数据库中没有NULL
Season_SeasonId
值,如果您需要对其执行某些操作,或者删除它或设置外键值。
只需在MatchFixture
上添加这些属性。
public int SeasonId { get; set; }
public Season Season { get; set; }
然后启用,添加并运行迁移。
PM> Enable-Migrations
PM> Add-Migration AddMatchFixtureFK
PM> Update-Database
然后你就拥有了所需的一切。
如果您检查AddMatchFixtureFK
迁移,Up
方法将完成所有必要步骤。
- Drop Foreign Key
- Drop Index
- Rename Column
- Alter Column (to non null-able)
- Create Index
- Add Foreign Key
是否需要添加这些属性,this post中已对此进行了解释。
但有一件事我发现添加这些导航属性(id和reference)会使数据操作和种子数据变得更容易。例如,您只需设置MatchFixture
即可向现有Season
添加新的SeasonId
。