0

多対 1 の関係でオブジェクトを保存および削除しようとしています。

次のコードがあります

    [System.Web.Http.HttpPost]
    public void FollowPerson(int personId, int companyId)
    {
        var uow = new Uow();
        var person = uow.People.GetById(personId);
        var company = uow.Companies.GetById(companyId);

        company.People.Add(person);
        uow.Companies.Update(company);
    }

    [System.Web.Http.HttpDelete]
    public void UnFollowPerson(int personId, int companyId)
    {
        var uow = new Uow();
        var person = uow.People.GetById(personId);
        var company = uow.Companies.GetById(companyId);

        company.People.Remove(person);
        uow.Companies.Update(company);
    }

フォロー機能は動作しますが、フォロー解除機能は動作しません。

フォロー解除機能は実際にはリストから人を削除しますが、更新機能はデータベースで更新しないため、機能しているようです。

私の更新機能は

public void Update(Company company)
    {           
        var compToUpate = DbSet.FirstOrDefault(c => c.Id == company.Id);
        DbContext.Entry(compToUpate).CurrentValues.SetValues(company);
        DbContext.SaveChanges();
    } 

Company クラス内の関係

private ICollection<Person> _people;
public virtual ICollection<Person> People
    {
        get { return _people; }
        set { _people = value; }
    }
4

1 に答える 1

1

これは機能しますか

    var company = uow.Companies.GetById(companyId);
      ...depending on if you have lazy loading, might need to do a load on People
   var person = company.People.where(p=> p.id==personId).first();
   company.People.Remove(person);

EF は厄介な獣です。

于 2013-06-25T12:46:18.087 に答える