Entity Framework 4.1 RC (Code First) - Entity not updating over association

五迷三道 提交于 2019-12-02 13:35:06

问题


What I'm trying to do is fairly simple. I have two classes:

public class TownRecord
    {
        public int Id { get; set; }
        public string ShortName { get; set; }
        public string FileName { get; set; }
        public string tags { get; set; }
        public virtual TownRecordType RecordType { get; set; }
        public DateTime? DateScanned { get; set; }
        public DateTime? RecordDate { get; set; }
        [StringLength(4000)]
        public string Comments { get; set; }
        public string UploadedBy { get; set; }
    }

    public class TownRecordType
        {
            public int Id { get; set; }
            public string RecordType { get; set; }
            public virtual ICollection<TownRecord> TownRecords {get; set; }
        }

When I want to update the RecordType property on the TownRecord class, I find that the association fails to update. No exception is thrown but the update is not performed:

 [HttpPost]
 public ActionResult Edit(int id, TownRecord tr, FormCollection collection)
 {
  TownRecordType newRecType = _ctx.TownRecordTypes.Find(Int32.Parse(collection["RecordType"]));
  tr.RecordType = newRecType;
  _ctx.Entry(tr).State = EntityState.Modified;
  _ctx.SaveChanges();
   return RedirectToAction("List");
  }

NOTE: I removed my error handling for clarity...

I've seen a question similar to this here but I'm not getting it. This is probably a really foolish rookie mistake but I've StackOverflowing and Googling for several hours and getting nowhere. Any help is greatly appreciated.


回答1:


This doesn't work because you are using independent association. Relation between TownRecord and TownRecordType is not part of town record's entry so changing state to modified doesn't say anything about state of relation. That is the real meaning of "independent" - it has its own entry but for unknown reason it is hard to get it in DbContext API (EF 4.1). Proposed way is using Foreign key association instead of independent association. To change your association to foreign key you must do this:

public class TownRecord
{
    public int Id { get; set; }
    ...
    [ForeignKey("RecordType")]
    public int RecordTypeId { get; set; }
    public virtual TownRecordType RecordType { get; set; }
    ...
}

You will change your code to:

[HttpPost]
public ActionResult Edit(int id, TownRecord tr, FormCollection collection)
{
    tr.RecordTypeId = Int32.Parse(collection["RecordType"]);
    _ctx.TownRecords.Attach(tr);
    _ctx.Entry(tr).State = EntityState.Modified;
    _ctx.SaveChanges();
    return RedirectToAction("List");
}

Actually the question with the same problem was asked 2 hours before you asked the question. I also tried to provide solution which works with independent association but I don't like it. The problem is that for independent association you need to have attached TownRecord loaded its actual TownRecordType and replace it with new TownRecordType.



来源:https://stackoverflow.com/questions/5507596/entity-framework-4-1-rc-code-first-entity-not-updating-over-association

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!