首页 > C# > 我在 ASP.NET 的实体框架,每当我将对象添加到数据库时,我都想获取 Id 值。我该怎么做?

我在 ASP.NET 的实体框架,每当我将对象添加到数据库时,我都想获取 Id 值。我该怎么做?

上一篇 下一篇

我在 ASP.NET 的实体框架有问题。每当我将对象添加到数据库时,我都想获取 Id 值。我该怎么做?

根据实体框架,解决方案是:

using (var context = new EntityContext())
{
    var customer = new Customer()
    {
        Name = "John"
    };

    context.Customers.Add(customer);
    context.SaveChanges();
        
    int id = customer.CustomerID;
}

这不会获取数据库表标识,而是获取实体的分配 ID,如果我们从表中删除记录,种子标识将与实体 ID 不匹配。

分割线

网友回答:

在使用实体框架时,我一直在使用 Ladislav Mrnka 的答案来成功检索 Id,但我在这里发布是因为我一直错过使用它(即在不需要的地方使用它),并认为我会在这里发布我的发现以防人们希望“解决”我遇到的问题。

考虑一个与客户具有外键关系的 Order 对象。当我同时添加新客户和新订单时,我正在做这样的事情;

var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id

但是,就我而言,这不是必需的,因为我在客户之间有外键关系。ID 和顺序。客户编号

我所要做的就是这个;

var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer}; 
context.Orders.Add(order);
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order

现在,当我保存更改时,为客户生成的id也会添加到订单中。我不需要额外的步骤

我知道这并不能回答原始问题,但认为它可能有助于不熟悉 EF 的开发人员过度使用可能不需要的投票最高的答案。

这也意味着更新在单个事务中完成,可能会避免 orphin 数据(所有更新都完成,或者没有)。

分割线

网友回答:

这很容易。如果您使用的是数据库生成的 ID(如在 MS SQL 中),则只需将实体添加到相关 . 将自动为您填充:IDENTITYObjectSetSaveChangesObjectContextId

using (var context = new MyContext())
{
  context.MyEntities.Add(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Yes it's here
}

默认情况下,实体框架在使用自动生成的 s 时跟在每个后面。INSERTSELECT SCOPE_IDENTITY()Id

分割线

网友回答:

保存更改后,您需要重新加载实体。因为它已被 EF 无法跟踪的数据库触发器更改。所以我们需要从数据库再次重新加载实体,

db.Entry(MyNewObject).GetDatabaseValues();

然后

int id = myNewObject.Id;

看看下面问题中的@jayantha答案:

使用 defaultValue 时,如何获取实体框架中插入实体的 ID?

在下面的问题中查看@christian答案也可能有所帮助:

实体框架刷新上下文?

模板简介:该模板名称为【我在 ASP.NET 的实体框架,每当我将对象添加到数据库时,我都想获取 Id 值。我该怎么做?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 260次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-17
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 响应式 微信素材 企业网站 单页式简历模板 微信模板 微信公众平台 微信图片 html5 自适应
您可能会喜欢的其他模板