0

私は .NET スタックにまったく慣れていませんが、次のテクノロジを含む小さな N 層アプリケーションを開発することができました。

WPF -> WCF -> エンティティ フレームワーク -> SQL Server

私の疑問は主に、Entity Framework がナビゲーション プロパティの割り当てをどのように管理するかについてです。ボールを転がすためにデータ コントラクト コードを配置します ...

[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; }
}

私の Seed メソッドでは、次のことを行っています。

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();

ポイントは、コンテキストを破棄して次のようなクエリを実行した後です。WorkerId と WorkId は保存されますが、問題エンティティ内に関連するオブジェクトは保存されません。

何か不足していますか?

ご回答ありがとうございます。

4

1 に答える 1

1

はい、する必要があります

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

新しいコンテキストで子をリロードするときに子を設定するため。

于 2012-12-06T09:11:52.260 に答える