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.Id调用SetValues
前的code>。