EF 5.0 Code第一个导航属性null仅适用于一个属性

时间:2013-05-14 05:02:51

标签: asp.net-mvc-3 entity-framework entity-framework-5

使用EF 5.0 CodeFirst,我似乎遇到了以下模型的问题:

enter image description here

当我尝试使用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; }
}

0 个答案:

没有答案