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

Entity framework 未为现有父实体添加相关数据,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我试图保存一个地方的评级,我有下面的代码,但它似乎无法保存现有实体的评级(到评级表) place.Ratings.Add(rating); _placeRepository.AddPlaceIfItDoesntExist(place); _placeRepository.Save(); 这是存储库方法 public void AddPlaceIfItDoesntExist(Place place) { var placeItem = cont

我试图保存一个地方的评级,我有下面的代码,但它似乎无法保存现有实体的评级(到评级表)

 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; }
 }
公共课堂场所
{
公共场所()
{
评级=新列表();
}
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串GooglePlaceId{get;set;}
}
我认为问题的症结在于,我需要根据googleplaceid(一个字符串)而不是id(每个位置都是唯一的)来检查位置是否存在

context.Entry(placeItem).State = EntityState.Modified;
您只需将现有的
placeItem
对象标记为已修改。但它与传递的
place
对象不同,因此包含原始值

相反,将该行替换为:

context.Entry(placeItem).CurrentValues.SetValues(place);
或者,可以使用允许传递自定义标识表达式的方法重载:

using System.Data.Entity.Migrations;

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

第一个方法出现错误。属性“Id”是对象密钥信息的一部分,无法修改。可能是特定于您的用法。尝试
place.Id=placeItem.IdSetValues
前的code>。