CF CTP5:非虚拟导航属性上的意外外键关系 [英] CF CTP5: Unexpected foreign key relation on non virtual navigation property
本文介绍了CF CTP5:非虚拟导航属性上的意外外键关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下型号:
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public virtual Person GeneralManager { get; set; }
public virtual Division Division { get; set; }
public virtual Season Season { get; set; }
public virtual TeamBase Base { get; set; }
public virtual ICollection<Game> HomeSchedule { get; set; }
public virtual ICollection<Game> AwaySchedule { get; set; }
public virtual ICollection<RosterEntry> Players { get; set; }
#region Constructors
public Team()
{
HomeSchedule = new List<Game>();
AwaySchedule = new List<Game>();
Players = new List<RosterEntry>();
}
#endregion
public List<Game> CombinedSchedule
{
get
{
IEnumerable<Game> mergedList = HomeSchedule.Union(AwaySchedule);
return new List<Game>(mergedList.OrderBy(g => g.FieldDate.Date));
}
}
}
public class Game
{
public int Id { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
public virtual Season Season { get; set; }
public virtual Division Division { get; set; }
public virtual FieldDate FieldDate { get; set; }
public virtual Team HomeTeam { get; set; }
public virtual Team AwayTeam { get; set; }
}
public override void OnModelCreating(...)
{
....
modelBuilder.Entity<Game>()
.HasRequired(g => g.HomeTeam)
.WithMany(t => t.HomeSchedule)
.HasForeignKey(g => g.HomeTeamId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Game>()
.HasRequired(g => g.AwayTeam)
.WithMany(t => t.AwaySchedule)
.HasForeignKey(g => g.AwayTeamId)
.WillCascadeOnDelete(false);
}
推荐答案
嗨肯,
您需要告诉Code First忽略CombinedSchedule属性:
You need to tell Code First to ignore the CombinedSchedule property:
modelBuilder.Entity< Team>()。忽略(t => t.CombinedSchedule);
modelBuilder.Entity<Team>().Ignore(t => t.CombinedSchedule);
虚拟修饰符用于启用延迟加载,因此它不是一项硬性要求,只要初始化集合就不需要setter。这就是为什么Code First仍在收拾房产并将其作为一种关系包含在内的原因。
The virtual modifier is used to enable lazy loading so it's not a hard requirement and a setter isn't required as long as you initialize the collection. That's why Code First is still picking up the property and including it as a relationship.
~Rowan
这篇关于CF CTP5:非虚拟导航属性上的意外外键关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文