2012-05-08 25 views
0

だから、私は自分のefモデルの次のイニシャライザを持っています。ラムダ式とEntity Framework、別のメソッドで作成されたオブジェクトへの参照を取得する方法

簡素化するために、私は1台の車両、1つの顧客、1つの住所エンティティを持っています。 1つのメソッドでAddressエンティティを作成しました。 Customerエンティティを作成する必要がありますが、既存のオブジェクトにAddress値を割り当てるにはどうすればよいですか?

public class DevelopmentInitializer 
    { 
     /// <summary> 
     /// This class allows the database tables to be created and seed at runtime. 
     /// </summary> 
     public class AskAndTrackInitializer : DropCreateDatabaseAlways<AskAndTrackContext> 
     { 
      /// <summary> 
      /// This fills the database with sample data to start with 
      /// </summary> 
      /// <param name="context">DBContext required for the connection</param> 
      protected override void Seed(AskAndTrackContext context) 
      { 
       BuildDealers(context); 
       BuildRequesters(context); 
       BuildAddresses(context); 
       BuildCustomers(context); 
       BuildVehicles(context); 

       BuildWorkflowsBase(context); 
      } 

      private void BuildDealers(AskAndTrackContext context) 
      { 
       var dealer1 = new Dealer {DealerId = 1, Name = "Dealer 1"}; 
       var dealer2 = new Dealer { DealerId = 2, Name = "Dealer 2" }; 
       var dealer3 = new Dealer { DealerId = 3, Name = "Dealer 3" }; 
       var dealer4 = new Dealer { DealerId = 4, Name = "Dealer 4" }; 
       var dealer5 = new Dealer { DealerId = 5, Name = "Dealer 5" }; 

       context.Dealers.Add(dealer1); 
       context.Dealers.Add(dealer2); 
       context.Dealers.Add(dealer3); 
       context.Dealers.Add(dealer4); 
       context.Dealers.Add(dealer5); 

      } 

      /// <summary> 
      /// Requesters test data 
      /// </summary> 
      private void BuildRequesters(AskAndTrackContext context) 
      { 
       var requester1 = new Requester {EmailAddress = "[email protected]", Name="Andres x", RequesterId=1}; 
       var requester2 = new Requester { EmailAddress = "[email protected]", Name = "Andres y", RequesterId = 2 }; 
       var requester3 = new Requester { EmailAddress = "[email protected]", Name = "Juan l", RequesterId = 3 }; 
       var requester4 = new Requester { EmailAddress = "[email protected]", Name = "Peter x", RequesterId = 4 }; 
       var requester5 = new Requester { EmailAddress = "[email protected]", Name = "Patrick z", RequesterId = 5 }; 

       context.Requesters.Add(requester1); 
       context.Requesters.Add(requester2); 
       context.Requesters.Add(requester3); 
       context.Requesters.Add(requester4); 
       context.Requesters.Add(requester5); 

      } 

      /// <summary> 
      /// Workflow base test data and its related objects 
      /// </summary> 
      private void BuildWorkflowsBase(AskAndTrackContext context) 
      { 

      } 

      /// <summary> 
      /// Vehicle test data 
      /// </summary> 
      private void BuildVehicles(AskAndTrackContext context) 
      { 
       //var vehicle1 
      } 

      /// <summary> 
      /// Customers test data 
      /// </summary> 
      private void BuildCustomers(AskAndTrackContext context) 
      { 
       //var customer1 = new Customer{Address = ??? 


      } 

      private void BuildAddresses(AskAndTrackContext context) 
      { 
       var address1 = new Address 
            { 
             AddressId = 1, 
             Box = "71", 
             City = "Antwerp", 
             Number = "1", 
             Street = "Belgielei", 
             Zip = "2018" 
            }; 

       var address2 = new Address 
            { 
             AddressId = 2, 
             Box = "21", 
             City = "Antwerp", 
             Number = "1", 
             Street = "Lange Leemstraat", 
             Zip = "2018" 
            }; 

       var address3 = new Address 
            { 
             AddressId = 3, 
             Box = "23", 
             City = "Antwerp", 
             Number = "1", 
             Street = "Lamoriniestraat", 
             Zip = "2018" 
            }; 

       var address4 = new Address 
            { 
             AddressId = 4, 
             Box = "24", 
             City = "Antwerp", 
             Number = "1", 
             Street = "De Keyserlei", 
             Zip = "2000" 
            }; 

       var address5 = new Address 
            { 
             AddressId = 5, 
             Box = "34", 
             City = "Antwerp", 
             Number = "1", 
             Street = "Italialei", 
             Zip = "2020" 
            }; 

       context.Addresses.Add(address1); 
       context.Addresses.Add(address2); 
       context.Addresses.Add(address3); 
       context.Addresses.Add(address4); 
       context.Addresses.Add(address5); 

      } 
     } 
+0

lolこれはラムダ式とは関係がないと思いますか? –

+0

EFコード、またはEDMモデルを使用していますか?あなたの選択に応じて、クラスやEDMモデルをご利用ください。 – JotaBe

+0

はいEFコードファースト。 –

答えて

1

var newChild = new ChildEntity(); 

をし、親エンティティのリストに追加します。

parentEntity.ChildEntities.Add(newChild); 

newChildはコンテキスト内に自動的に配置され、変更を振ると、子に必要なプロパティ(FKプロパティ)がnewChildに設定され、変更がデータベースに保存されます。

答えは、親のリストに追加するだけです。

実際には、関係は、3つの方法で表現されています

  • 子エンティティの親のリスト
  • することができFK(を指す子エンティティ内のプロパティエンティティに含まれるかどうか)

コンテキストで作業している場合は、3つのプロパティのいずれかを変更するたびに、それに応じて他のプロパティが修正されます。

したがって、回答には他のプロパティの変更が含まれる可能性があります。

0

私は2つのオプションを参照してください。(ラムダ式とは何の関係も持っていません。)あなたはBuildAdresses内部からBuildCustomersを呼び出すことができます

  1. を。

    private void BuildAddresses(AskAndTrackContext context) 
    { 
        var listAddress = new List<Address>(); 
        // create adresses, populate listAdress with the Address objects. 
        BuildCustomers(AskAndTrackContext context, listAddress); 
    } 
    
  2. BuildAdresses IDのリストを返し、あなたはBuildCustomersにパラメータとしてリストを渡すことができます。

    List<Address> addresses = BuildAddresses(context); 
    BuildCustomers(context, addresses); 
    

各移入関数の最後にcontext.SaveChanges()を呼び出すことを忘れないでください。このようにして、Entityは渡すオブジェクトが表の要素であることを認識します。

どちらのソリューションも同じことを行いますが、読みやすさは異なります。あなたはChildEntity作成した場合は、

public List<ChildeEntity> ChildEntities { get; set; } 

その後partentエンティティに子エンティティのリストを宣言する2つのエンティティ間の関係を宣言しなければなりませんEFコードファーストで

+0

はい、どうすればオブジェクトのインスタンス化の内部でオブジェクトアドレスへの参照を割り当てることができますか? –

+0

引用符を見ますか?私のコードで質問plsを理解する。 –

+0

Ah、alright:まず、一連の 'Add'コマンドの後に' context.SaveChanges() 'を使う必要があります。この方法でアイテムをデータベースに追加し、オブジェクトを参照すると、Entityはそのアイテムがデータベースの要素であると認識します。私の編集を参照してください! –

関連する問題