1

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; }
}
4

0 に答える 0