EF 5.0 CodeFirst を使用した次のモデルで問題が発生しているようです。
SalesPlanActivity でリストを作成しようとすると、ナビゲーション プロパティからアクティビティ名を取得できません
つまり、モデルが SalesPlanActivity の場合、model.Activity <--- は null ですが、model.Company と model.SalesPlan は問題ありません。
企業には活動のライブラリがあり、各企業には多数の販売計画があり、各販売計画には多数の活動 (活動ライブラリから取得) があるという考え方です。
これを間違ってマッピングしていますか?
SalesPlanActivity と Activity のマッピングは 1:1 にする必要がありますか?
次の関係を追加しました
// Relationships
modelBuilder.Entity<SalesPlanActivity>().HasRequired(t => t.Activity)
.WithMany(t => t.SalesPlanActivities)
.HasForeignKey(d => new { d.CompanyId, d.ActivityId });
modelBuilder.Entity<SalesPlanActivity>().HasRequired(t => t.SalesPlan)
.WithMany(t => t.SalesPlanActivities)
.HasForeignKey(d => new { d.SalesPlanId, d.CompanyId });
public class Activity : IAuditable
{
[Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ActivityId { get; set; }
[Key, Column(Order = 1)]
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
[Display(Name = "Activity Name"), Required, StringLength(256)]
public string Name { get; set; }
public virtual ICollection<SalesPlanActivity> SalesPlanActivities { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreatedOn { get; set; }
public Guid CreatedBy { get; set; }
[DataType(DataType.DateTime)]
public DateTime ModifiedOn { get; set; }
public Guid ModifiedBy { get; set; }
}
public class Company : IAuditable
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CompanyId { get; set; }
[Display(Name = "Company Name"), Required, StringLength(256)]
public string Name { get; set; }
public virtual ICollection<Activity> Activities { get; set; }
public virtual ICollection<SalesPlan> SalesPlans { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreatedOn { get; set; }
public Guid CreatedBy { get; set; }
[DataType(DataType.DateTime)]
public DateTime ModifiedOn { get; set; }
public Guid ModifiedBy { get; set; }
}
public class SalesPlan : IAuditable
{
[Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SalesPlanId { get; set; }
[Key, Column(Order = 1)]
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
[Display(Name = "Sales Plan Name"), Required, StringLength(256)]
public string Name { get; set; }
[Display(Name = "Total Points"), Required]
public decimal TotalPoints { get; set; }
public virtual ICollection<SalesPlanActivity> SalesPlanActivities { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreatedOn { get; set; }
public Guid CreatedBy { get; set; }
[DataType(DataType.DateTime)]
public DateTime ModifiedOn { get; set; }
public Guid ModifiedBy { get; set; }
}
public class SalesPlanActivity : IAuditable
{
[Key, Column(Order = 0)]
public int SalesPlanId { get; set; }
public virtual SalesPlan SalesPlan { get; set; }
[Key, Column(Order = 1)]
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
[Key, Column(Order = 2)]
public int ActivityId { get; set; }
public virtual Activity Activity { get; set; }
public decimal Points { get; set; }
public int SortOrder { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreatedOn { get; set; }
public Guid CreatedBy { get; set; }
[DataType(DataType.DateTime)]
public DateTime ModifiedOn { get; set; }
public Guid ModifiedBy { get; set; }
}