Carlos Murdock
Carlos Murdock

Reputation: 103

Foreign key relationship, related object not storing properly in DbContext?

Despite I'm completely new to .NET stack, I somehow managed to develop a small N-Tier application involving the following technologies:

WPF -> WCF -> Entity Framework -> SQL Server

My doubt is mainly about how Entity Framework manages the assignment of navigation properties. I'll put my data contract code to get the ball rollin' ...

[DataContract]
public class Problem
{
    [DataMember]
    public int ProblemId { get; set; }

    [DataMember]
    public String Title { get; set; }

    [DataMember]
    public String Description { get; set; }

    [DataMember]
    public int WorkerId { get; set; }

    [DataMember]
    public int WorkId { get; set; }

    [DataMember]
    [ForeignKey("WorkerId")]        
    public virtual Worker Worker { get; set; }

    [DataMember]
    [ForeignKey("WorkId")]        
    public virtual Work Work { get; set; }
}


[DataContract]
public class Worker
{
    [DataMember]
    public int WorkerId { get; set; }

    [DataMember]
    public String Name { get; set; }    

    [DataMember] 
    public virtual ICollection<Problem> Problems { get; set; }        
}


[DataContract]
public class Work
{
    [DataMember]
    public int WorkId { get; set; }

    [DataMember]
    public String Name { get; set; }      

    [DataMember] 
    public virtual ICollection<Problem> Problems { get; set; }
}

In my Seed method, I'm doing the following:

Work Work1 = new Work()
                                {
                                    WorkId = 1,
                                    Name = "Work1"
                                };

        Worker emp1 = new Worker()
                                {
                                    WorkerId = 1,
                                    Name = "Worker1"
                                };

        Problem Problem1 = new Problem()
                            {
                                ...
                                WorkId = 1,
                                WorkerId = 1
                            };

        Problem Problem2 = new Problem()
                              {
                                  ...
                                  Work = Work1,
                                  Worker = emp1
                              };

        //add objects to the context
        context.Works.Add(Work1);
        context.Workers.Add(emp1);
        context.Problems.Add(Problem1);
        context.Problems.Add(Problem2);

        //added just for testing
        Problem1.Work = Work1;
        Problem1.Worker = emp1;

        //finally: save changes           
        context.SaveChanges();

And the point is: after disposing the context & doing a query like: context.Problems.ToList() ... both problem1 & problem2 have its navigation properties (Worker, Work) assigned to Null. WorkerId and WorkId are stored, but no its related Objects inside the Problem Entity.

Am I missing something?

Thank you very much in advance for your answer!

Upvotes: 0

Views: 2007

Answers (1)

Justin Harvey
Justin Harvey

Reputation: 14672

Yes, you need to do

context.Problems.Include(p=>p.Work).ToList() 

in order to populate the children when you reload them under a new context.

Upvotes: 1

Related Questions