使用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; }
}