刚刚开始使用EF,可以说,在第一个障碍时就已经失败了。
我有两个类:
public class Hero
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class League
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Hero> Team { get; set; }
}
现在,我的代码中没有任何东西可以阻止我拥有一个属于两个联盟的英雄:
League A = new League() { Name = "A Team" };
League B = new League() { Name = "B Team" };
Hero me = new Hero() { Name = "Richard" };
A.Team = new List<Hero>();
A.Team.Add(me);
B.Team = new List<Hero>();
B.Team.Add(me);
然而,当我从包管理器运行“更新数据库”时,它会用英雄-effectively上的外键生成我的数据库,这意味着我的英雄只能是一个联盟的成员:
PSEUDO:
TABLE HERO == ID,NAME,LEAGUE_ID
TABLE LEAGUE = NAME,ID
这有效地阻止了我的职业正常工作,因为英雄现在只能成为一个联盟的成员…我怎么才能让EF拿起它呢?我猜它需要的是一种多对多的关系,但它并不是在建立一种关系。
发布于 2013-02-27 00:26:56
我假设你希望一个联盟中有很多英雄,但是一个英雄在很多联盟中。因此,这是一种多对多关系,要求您在它们之间有一个链接表对象,并按如下方式重新构造它(此处使用带数据注释的Code-First显示):
public class Hero
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<HeroLeagueLink> Leagues { get; set; }
}
public class League
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<HeroLeagueLink> Team { get; set; }
}
public class HeroLeagueLink
{
[Key, Column(Order = 0), ForeignKey("Hero")]
public virtual int HeroID { get; set; }
[Key, Column(Order = 1), ForeignKey("League")]
public virtual int LeagueID { get; set; }
public virtual Hero Hero { get; set; }
public virtual League League { get; set; }
}
发布于 2013-02-27 00:33:25
为了建立一个多对多的关系,你需要在英雄实体上有一个联盟集合。
public class Hero
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<League> Leagues { get; set; }
}
public class League
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Hero> Team { get; set; }
}
发布于 2013-02-27 05:16:13
如果你不想在你的英雄类上定义一个集合,这也可以通过配置来实现。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<League>().HasMany(x => x.Team).WithMany();
base.OnModelCreating(modelBuilder);
}
https://stackoverflow.com/questions/15094092
复制相似问题