实体框架多对多关系删除对象和创建引用

时间:2013-07-05 19:44:16

标签: java javascript asp.net-mvc-4 angularjs entity

所以我使用angularJS将经销商对象传递给我的控制器。每个经销商对象都有一个虚拟ICollection。我使用HTML multiselect将联系人对象添加到经销商的联系人集合中,然后我将整个经销商传递给我的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对象中的Contact的引用。这很糟糕,因为我希望能够从ContactView页面显示和编辑联系人。

修改

这就是我对rerences的意思,这里是Json的一个例子..

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

修改

如果我将飞行的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");
                    });

但是,当我创建新联系人并与经销商相关联时,我不会收到此错误。它会将经销商添加到联系人经销商列表中......但它不会将联系人添加到经销商联系人列表

0 个答案:

没有答案