【问题标题】:getting identity row value using ADO.NET Entity使用 ADO.NET Entity 获取标识行值
【发布时间】:2011-08-15 11:17:47
【问题描述】:

我在 SQL Server 2008 数据库中有下表:

User
--------------------------------------------------------
Id           Numeric(18, 0) | Identity(1, 1) PK not null
Name         Nchar(20)      | Not null

我正在使用 ADO.NET 实体数据模型来做:

MyEntities entities;
try
{
    entities = new MyEntities();
    if (entities.User.Count(u => u.Name == userName) == 0)
    {
        entities.User.AddObject(new User()
        {
            Name = userName
        });
        resultCode = 1;
        entities.SaveChanges();
    }
    else
    {
        resultCode = 2;
    }
}
catch
{
    resultCode = 3;
}
finally
{
    if (entities != null)
        entities.Dispose();
}

如何获取新用户添加的 User.Id?

【问题讨论】:

    标签: entity-framework-4 ado.net-entity-data-model


    【解决方案1】:

    尝试保持对用户对象的引用。调用 SaveChanges() 后,应自动更新 Id。这是对您的代码的修改以进行演示:

    if (entities.User.Count(u => u.Name == userName) == 0)
    {
        User newUser = new User()
        {
            Name = userName
        };
        entities.User.AddObject(newUser);
        resultCode = 1;
        entities.SaveChanges();
    
        // newUser.Id should be populated at this point.
    }
    

    【讨论】:

      【解决方案2】:

      如果您的模型配置正确,并且您的 Id 属性标有 StoreGeneratedPattern.Identity,您只需调用以下代码:

          var user = new User()
          {
              Name = userName
          };
          entities.User.AddObject(user);
          resultCode = 1;
          entities.SaveChanges();
          int id = user.Id; // it's here
      

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多