1

そのため、angularJS を使用してディーラー オブジェクトをコントローラーに渡します。各ディーラー オブジェクトには、仮想 ICollection があります。HTML multiselect を使用して、Dealer の連絡先コレクションに連絡先オブジェクトを追加してから、ディーラー全体を C# コントローラーに渡します。

これはコントローラーのコードです

        public HttpResponseMessage PostDealer(Dealer dealer)
    {
        if (ModelState.IsValid)
        {
            var contacts = dealer.contacts;

            db.Dealers.Add(dealer);

            if (dealer.contacts != null)
            {

                foreach (var contact in dealer.contacts)
                {
                    db.Contacts.Attach(contact);
                }
            }


            db.SaveChanges();

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, dealer);
            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = dealer.Id }));
            return response;
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }

このように関係が構築されます

            modelBuilder.Entity<Dealer>().HasMany(u => u.contacts)
                    .WithMany(d => d.dealers)
                    .Map(m =>
                        {
                            m.ToTable("ContactMap");
                            m.MapLeftKey("DealerId");
                            m.MapRightKey("Contact_Id");
                        });

これを行うと、すべての連絡先オブジェクトが API/連絡先から削除され、代わりにディーラー オブジェクトの連絡先への参照に置き換えられます。ContactView ページから連絡先を表示および編集できるようにしたいので、これは悪いことです。

編集

これが参照についての意味です。Json の一部の例を次に示します。

    [
   {
      "$id":"1",
      "dealers":[
     {
        "$id":"2",
        "dealerg":null,
        "contacts":[
           {
    [OMITED OBJECT DETAILS.........]
      "Dealer_Id":null
   },
   {
      "$ref":"3"
   },
   {
      "$ref":"4"
   },
   {
      "$ref":"5"
   }
]

編集

flent api マッピングを次のように変更すると、

           modelBuilder.Entity<Dealer>().HasMany(u => u.contacts)
                .WithMany(##removed this piece of code##)
                .Map(m =>
                    {
                        m.ToTable("ContactMap");
                        m.MapLeftKey("DealerId");
                        m.MapRightKey("Contact_Id");
                    });

ただし、新しい連絡先を作成してディーラーに関連付けると、このエラーは発生しません。ディーラーを連絡先ディーラーリストに追加します...しかし、連絡先をディーラーの連絡先リストに追加しません

4

0 に答える 0