CF CTP5:非虚拟导航属性上的意外外键关系 [英] CF CTP5: Unexpected foreign key relation on non virtual navigation property

查看:59
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆