未为现有父实体添加相关数据

时间:2016-03-25 11:46:21

标签: entity-framework entity-framework-6

我试图保存对某个地方的评分,我有下面的代码,但它似乎没有为现有实体保存评级(到评级表)

 place.Ratings.Add(rating);
  _placeRepository.AddPlaceIfItDoesntExist(place);
  _placeRepository.Save();

这是存储库方法

 public void AddPlaceIfItDoesntExist(Place place)
        {
            var placeItem = context.Places.FirstOrDefault(x => x.GooglePlaceId == place.GooglePlaceId);
            if(placeItem==null)
            {
                context.Places.Add(place);
            }
            else
            {
                context.Entry(placeItem).State = EntityState.Modified;
            }
        }

这是poco

 public class Place
 {
        public Place()
        {
            Ratings = new List<Rating>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string GooglePlaceId { get; set; }
 }

我认为问题的关键是因为我需要根据googleplaceid(一个字符串)检查该地方是否存在而不是id(两个地方都是唯一的btw)

1 个答案:

答案 0 :(得分:0)

下面

context.Entry(placeItem).State = EntityState.Modified;

您只需将现有的placeItem对象标记为已修改。但它与传递的place对象不同,因此包含原始值。

相反,请将该行替换为:

context.Entry(placeItem).CurrentValues.SetValues(place);

或者,您可以使用允许传递自定义标识表达式的DbSetMigrationsExtensions.AddOrUpdate方法重载:

using System.Data.Entity.Migrations;

public void AddPlaceIfItDoesntExist(Place place)
{
    context.Places.AddOrUpdate(p => p.GooglePlaceId, place);
}