2015-02-09 63 views
0

我正在使用Azure移动服务TableController。 我在实体框架中遇到外键关系问题。我有两个表格:人员和国家。人员对CountryId有一个外键列。Azure移动服务表控制器和EntityState.Modified

保存时,实体框架会在国家/地区表中创建一个与国家/地区[0]同名的新行,但会增加一个新的ID。这显然不是理想的结果 - 人应该将其Country_CountryId字段设置为国家/地区ID [0],并且不应创建新行。

我该如何解决这个问题?

我使用表控制器

// POST tables/Booking 
    public async Task<IHttpActionResult> PostPerson(Personitem) 
    { 
     Person current = await InsertAsync(item); 
     return CreatedAtRoute("Tables", new { id = current.Id }, current); 
    } 

我知道如何在API控制器设置EntitySate

using (var dt = new DatabaseContext()) { 
    dt.Entities.Add(person); 
    dt.Entry(person.Country).State = EntityState.Modified; 
    dt.SaveChanges(); 
} 

回答

0

当您保存对象,你应该从数据库中获取的国家,并在使用它人物,如:

  • 从数据库中获取国家“contryIdX”

  • 集person.ContryId = “contryIdX”

  • 然后将其保存在数据库

+0

是的,你是对的。我应该只传递CountryId而不是Country对象。 – 2015-02-09 18:53:00