entity-framework - 在 Entity Framework 中,插入后获取标识列的值

标签 entity-framework identity-column

我正在使用 EF4。我想在数据库中插入一个新的 MyObject。 MyObject 有两个字段:

Id:int(身份)和
名称:字符串

正如我在文档中看到的那样, Entity Framework 应该在调用 SaveChanges() 后将 MyObject.Id 设置为数据库生成的值,但在我的情况下没有发生。

using (var context = new MyEntities())
{
    var myObject = MyObjects.CreateMyObject(0, "something"); // The first parameter is identity "Id"
    context.MyObjects.AddObject(myObject);
    context.SaveChanges();
    return myObject.Id; // The returned value is 0
}

更新:

这发生在我的一个实体中,其他实体工作正常。顺便说一下,我查了一下,DB 列是身份,StoreGeneratedPattern 设置为身份。
这是 SSDL。我看不出有什么区别。第一个不能正常工作:
    <EntityType Name="OrgUnit">
      <Key>
        <PropertyRef Name="Srl" />
      </Key>
      <Property Name="Srl" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="TypeId" Type="smallint" Nullable="false" />
      <Property Name="Name" Type="varchar" Nullable="false" MaxLength="80" />      
    </EntityType>

    <EntityType Name="OrgType">
      <Key>
        <PropertyRef Name="Srl" />
      </Key>
      <Property Name="Srl" Type="smallint" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="Title" Type="varchar" Nullable="false" MaxLength="120" />
      <Property Name="Options" Type="int" Nullable="false" />
    </EntityType>

更新在数据库中成功完成并生成标识,但实体对象未使用新标识进行更新。

最佳答案

在这种情况下,您的 EF 模型可能不是最新的 - EF 应该自动从数据库中获取您的新 ID。尝试刷新您的 EF 模型。

您的身份列的属性在您的 EDMX 模型中应如下所示:

enter image description here

关于entity-framework - 在 Entity Framework 中,插入后获取标识列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6306743/

相关文章:

c# - 使用 Entity Framework 从存储过程中获取数据

c# - 在 OnModelCreating 中撤消 HasIndex

entity-framework - Entity Framework 代码优先与链接表的一对多关系映射

sql-server - C# 如何通过 Internet 在数据库实例之间同步数据

c# - Entity Framework Core 尝试更新模型中标记为身份的列

javascript - C# - MVC - JSON - 使用 ViewBag 将列表从服务器端返回到客户端

c# - 无法在类库中为 Entity Framework 启用迁移

sql - 无法插入显式值,因为 IDENTITY_INSERT 为 OFF,但无法将 IDENTITY_INSERT 设置为 ON,因为它已为 ON

sql-server - 奇怪的 @@IDENTITY 范围行为?