EF相关实体在添加实体时尝试添加到数据库

时间:2016-05-13 06:07:14

标签: entity-framework

这个问题与以下内容有关: 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();

然后我收到错误,我正在尝试插入复制位置对象。因为此时区已设置为数据库中存在的位置,并且它正在尝试附加该时区。

这是什么解决方法?

0 个答案:

没有答案