2011-09-29 49 views
0

我有一个领域模型是这样EF CF:是不是FK的对象总是空?

public class ShipToCode 
    { 

     public int ShipToCodeID { get; set; } 

     [Required(ErrorMessage = "Nombre es requerido",AllowEmptyStrings = false)] 
     [StringLength(50, ErrorMessage = "Debe ser menor a 50 carácteres")] 
     [MaxLength(50)] 
     [Column("nb_name")] 
     public string Name { get; set; } 

     [StringLength(15, ErrorMessage = "Debe ser menor a 15 carácteres")] 
     [MaxLength(15)] 
     [Column("cd_locId")] 
     public string locId { get; set; } 

     public int? RegionID { get; set; } 
     public virtual Region Region { get; set; } 


     [Required(ErrorMessage = "Dealer es requerido")] 
     public int DealerID { get; set; } 
     public virtual Dealer Dealer { get; set; } 
    } 
public class Dealer 
    { 

     public Dealer() 

     { 

      this.ShipToCode = new HashSet<ShipToCode>(); 
     } 

     public int DealerID { get; set; } 

     [Required(ErrorMessage = "Nombre es requerido")] 
     [StringLength(100, ErrorMessage = "Debe ser menor a 100 carácteres")] 
     [MaxLength(100)] 
     [Column("nb_name")] 
     public string Name { get; set; } 

     [Required(ErrorMessage = "Codigo de distribuidor es requerido")] 
     [StringLength(100, ErrorMessage = "Debe ser menor a 100 carácteres")] 
     [MaxLength(100)] 
     [Column("cd_dealerCode")] 
     public string DealerCode { get; set; } 

     public virtual ICollection<ShipToCode> ShipToCode { get; private set; } 


    } 

在我的上下文

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 

      modelBuilder.Entity<ShipToCode>() 
       .HasRequired<Dealer>(d => d.Dealer) 
       .WithMany(d => d.ShipToCode) 
       .HasForeignKey<int>(c => c.DealerID); 

     } 

但是,当我得到任何ShipToCode或经销商,使用DbSet的查找功能,在我的经销商的对象ShipToCode或ShipToCode在经销商的ICollection为空

这是正常的或我错过了什么?请帮忙!!

回答

0

在你的经销商的财产,
public virtual ICollection<ShipToCode> ShipToCode { get; private set; }
有你需要把它公开,否则EF无法从数据库中设置的private set方法。并确保你已在你的context中启用了lazyloading。如果您没有启用延迟加载,你可以使用这样的渴望加载,

Context.ShipToCodes.Include(s=>s.Dealer).where(s=>s.ShipToCodeID ==1) 
+0

谢谢!! 在我的上下文的构造函数中,我启用了延迟加载,并且可以很好地处理对象,但在我的IColletion 中,只需将最后保存的行带给我即可。 – user972139

+0

为什么你有'私人设置'方法'IColletion '? –