这个问题与以下内容有关: Saving an explicit entity through Entity Framework
基本上,Jcl接近我的工作。但是在尝试保存更改时还有另一个问题,因为它尝试插入我设置为foriegn键的重复实体。
我正在从Excel文件中读取位置对象,并构造位置对象。我需要设置该位置的TimeZone属性。有一个时区表,timezoneid被设置为位置表中的外键。
TimeZone tz = LocationsRepo.GetTimeZoneByName(timezone);
if (tz != null)
{
currentLocation.TimeZone = tz;
}
现在,当我尝试按如下方式保存位置时:
// Check if an entirely new entity is added or an existing entity is being updated.
Location existingLocation = locations.SingleOrDefault(
l =>
l.LocationCode.Equals(location.LocationCode, StringComparison.OrdinalIgnoreCase));
if (existingLocation != null)
{
location.LocationId = existingLocation.LocationId;
ClientContext.Entry(existingLocation).State =
ClientContext.Entry(existingLocation).State == System.Data.Entity.EntityState.Added
? System.Data.Entity.EntityState.Detached
: System.Data.Entity.EntityState.Deleted;
}
ClientContext.Entry(location).State = System.Data.Entity.EntityState.Added;
return ClientContext.SaveChanges();
我收到错误,我正在尝试在时区表中插入重复键。我理解这是因为ClientContext无法识别location.Timezone,因为它是在ClientContext之外设置的。所以我试着附上它:
ClientContext.TimeZones.Attach(location.TimeZone);
ClientContext.SaveChanges();
然后我收到错误,我正在尝试插入复制位置对象。因为此时区已设置为数据库中存在的位置,并且它正在尝试附加该时区。
这是什么解决方法?