我试图保存对某个地方的评分,我有下面的代码,但它似乎没有为现有实体保存评级(到评级表)
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)
答案 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);
}