1

所以我使用 angularJS 将经销商对象传递给我的控制器。每个经销商对象都有一个虚拟 ICollection。我使用 HTML 多选将联系人对象添加到 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/contacts 中删除,而是替换为对 Dealer 对象中的联系人的引用。这很糟糕,因为我希望能够从 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