0

Here is a sniplet of my model:

public class ContractParent
{
    public int ContractParentID { get; set; }
    public string Name { get; set; }
    public string Verbiage { get; set; }
    public int Position { get; set; }
    public bool IncludedByDefault { get; set; }
    public virtual IEnumerable<ContractChild> ContractChilds { get; set; }
    public virtual bool HasOnlyOneChild { get; set; }
}

public class ContractParentItem
{
    public int ContractParentItemID { get; set; }
    public virtual int ContractParentID { get; set; }
    public virtual ContractParent ContractParent { get; set; }
    public int ChargeID { get; set; }
    public virtual Charge Charge { get; set; }
}


public class Charge
{
    public int ChargeID { get; set; }         
    public virtual ChargeType ChargeType { get; set; }
    public int ChargeTypeID { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<ChargeContract> ChargeContracts { get; set; }
    public virtual Company Company { get; set; }
    public virtual int? CompanyID { get; set; }
    public virtual IEnumerable<ContractParentItem> ContractParentItems { get; set; }
    public virtual IEnumerable<ContractChildItem> ContractChildItems { get; set; }
}

When i try to access a Charge with ChargeID = 687:

Charge.ContractParentItem is null.

But its not!

Looking at my table ContractParentItem in SQL

There is an entity: ContractParentItemID=1 ContractParentID=8 ChargeID=687

I know i am missing something here.

public class Proposals : DbContext
    {    
        public DbSet<Charge> Charges { get; set; }            
        public DbSet<ContractParent> ContractParents { get; set; }
        public DbSet<ContractParentItem> ContractParentItems { get; set; }      
    }
Pinch
  • 4,009
  • 8
  • 40
  • 60

1 Answers1

1

Instead of

public virtual IEnumerable<ContractParentItem> ContractParentItems { get; set; }

you should have

public virtual ICollection<ContractParentItem> ContractParentItems { get; set; }
Wiktor Zychla
  • 47,367
  • 6
  • 74
  • 106
  • Thanks, could you please explain what was so wrong about IEnumerable? @WiktorZychla – Pinch Oct 17 '13 at 20:55
  • 1
    `IEnumerable` doesn't provide support for adding/removing individual objects while `ICollection` does. Im also not sure that EF can infer the relationships between your objects using `IEnumerable`(though I don't know for sure) http://stackoverflow.com/questions/10113244/why-use-icollection-and-not-ienumerable-or-listt-on-many-many-one-many-relatio . You can also use Fluent API if you want to ensure your mapping works correctly(rather than rely on EF inferring) – Matt Foxx Duncan Oct 17 '13 at 21:01