我的Entity Framework POCO类中有两个对象,名为Lifeboat and Sighting
瞄准与救生艇有1 ... *关系,这似乎工作正常(有一个SightingLifeboats链接表
我现在还需要重新引用这种关系,所以我需要一个从救生艇到瞄准的链接,它将是0 .. *
我试过反过来尝试制作一个虚拟但是这个没有用,也许我需要更流畅的编码?
我的救生艇课程:
<form action="action_page.php">
<fieldset>
<legend>Personal information:</legend>
First name:<br>
<input type="text" name="firstname" value="Mickey">
<br>
Last name:<br>
<input type="text" name="lastname" value="Mouse">
<br><br>
</fieldset>
<fieldset>
<legend>Course:</legend>
<input type="checkbox" name="french" value="French"> French
<br>
<input type="checkbox" name="german" value="German"> German
<br>
<input type="checkbox" name="spanish" value="Spanish"> Spanish
</fieldset>
<input type="submit" value="Submit">
</form>
瞄准课
public class Lifeboat : EntityBase
{
public Lifeboat()
{
Sightings = new List<Sighting>();
}
public string CurrentName { get; set; }
//A Lifeboat Ownes 0:* Sightings
public List<Sighting> Sightings { get; set; }
//public virtual Sighting Sightings { get; set; }
//Called from Context Class OnModelCreating
public static void LifeboatEntityConfiguration(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Lifeboat>().HasMany(x => x.Sightings).WithMany();
}
}
}
答案 0 :(得分:2)
这不是在Lifeboat
和Sighting
之间配置多对多关系的正确方法。如果删除已有的Fluent Api配置,则默认情况下,EF将创建第三个连接表SightingLifeboats
,该表将包含两个表的PK。那是因为每个实体都有一个集合导航属性。但您可以使用Fluent Api明确配置该关系:
modelBuilder.Entity<LifeBoat>()
.HasMany<Sighting >(l => l.Sightings)
.WithMany(s => s.LifeBoats)
.Map(cs =>
{
cs.MapLeftKey("LifeBoatRefId");
cs.MapRightKey("SightingId");
cs.ToTable("SightingLifeboats");
});
这样您就可以更改联结表的名称并指定FK属性名称,以防您需要更改它们。
另外,我建议将您的集合属性更改为virtual
。如果您创建了所有属性virtual
,那么EF将在运行时生成源自POCO类的代理类,这些代理允许EF了解实时的变化,而不是必须捕获对象的原始值,然后在保存时扫描更改。