【问题标题】:Self Tracking Entities not returning modified object自跟踪实体不返回修改后的对象
【发布时间】:2012-05-14 11:54:31
【问题描述】:

我有以下函数来更新和插入表中的记录

public DASInput UpdateDASInputTable(DASInput fileSetData, Guid programID)
    {
        string connectionString = GetConnectionString(programID);
        BI_ProgramConfigurationEntities dataContext = new BI_ProgramConfigurationEntities(connectionString);

        dataContext.DASInputs.ApplyChanges(fileSetData);
        dataContext.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave);
        fileSetData = dataContext.DASInputs.FirstOrDefault();

        return fileSetData;
    }

当我使用 DASInput 类型的新对象进行第一次调用时,它会正确插入到数据库中。 (DASInput 表的主键为 int 并开启了标识规范)。

但是这个第一次插入并没有返回 DASInput 表的主键的修改值。

因此,在每次后续调用中,都会在数据库中插入一条新记录。我希望在插入记录时将主键(由数据库自行生成)返回给客户端。

【问题讨论】:

标签: c# wcf self-tracking-entities


【解决方案1】:

将实体添加到 linq 控制的数据库中的语法不是更像:

context.Table.AddObject(newStore);
//or
context.Table.Add(newStore);

context.SaveChanges();

我只是试探性地回答这个问题,对 LINQ 并不了解。

【讨论】:

  • AddObject 方法显式插入到表中并且不更新表
  • context.SaveChanges() 会将添加的实体保存到数据库中。如果它是您正在寻找的更新(而不是添加新记录),那么只需调用 context.SaveChanges();而不是 context.Table.Add(newStore) - 由于从上下文中跟踪实体,这将更新属性,而不向数据库添加新实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多