22

我正在使用实体框架开发一个 ASP.net 应用程序。我DetailsView用来将数据插入数据库。有一个表 as Client,它的主键是client_idclient_id由数据库自动生成。我需要client_id在将记录插入Client表后自动生成并将其分配给隐藏字段以供将来使用。

我对此进行了搜索,并找到了很多解决方案。但我不知道如何使用它们,因为我是 asp.net 的新手。我发现 Entity Framework 在 call 之后会自动使用 db 生成的值填充业务对象SaveChanges()。我的问题是我应该在我的部分课程中把它叫做什么?什么是事件?

我将 DetailsView 与 EntityDataSource 一起使用,并将 EntityDataSource 直接与 Entity Model 绑定,因此我没有创建对象来插入数据。

4

4 回答 4

44

在调用 之后_dbContext.SaveChanges(),实体将自动更新为其新的身份字段值。

以下代码假定您的 Entity Framework 实体容器名称为 MyEntities,并且您的数据库的 Client 表至少具有以下两个字段:

client_id   int identity
client_name varchar(25)

您的代码可能如下所示:

// Establish DbContext
private readonly MyEntities _dbContext = new MyEntities();

// Create new client table entity and initialize its properties
var clientEntity = new Client { client_name="MyCo" };

// Add it to the ORM's collection of Client entities
_dbContext.Clients.Add(clientEntity);

// Save the new entity to the database
_dbContext.SaveChanges();

// Return the identity field from the existing entity,
//   which was updated when the record was saved to the database
return clientEntity.client_id;
于 2013-06-06T06:16:06.173 回答
5

插入实体后,应该更新它,以便映射到数据库中主键的属性具有新的 PK 值。

喜欢MyObject.Id会给你新的ID

于 2013-06-06T06:10:12.243 回答
3

这就是我要找的。

部分班级

protected void clientDataSource_OnInserted(object sender, EntityDataSourceChangedEventArgs e )
{

    int newPrimaryKey = ((Client)e.Entity).ClientId;
    Debug.WriteLine(" Client ID is " + newPrimaryKey);

}

EntityDataSource并在 aspx 页面中添加以下行。

OnInserted="clientDataSource_OnInserted"
于 2013-06-06T06:41:07.670 回答
0

谢谢,我花了 3 天时间搜索和搜索复杂的结果,但这个解决方案很棒!这是在 vb.net 中:

Protected Sub dvArticulos_ItemInserted(sender As Object, e As EntityDataSourceChangedEventArgs) Handles EntityDataSource1.Inserted
    Dim last_Serie As Long = DirectCast(e.Entity, articulos).Serie
    Session("Articulo") = last_Serie
End Sub
于 2013-11-14T01:53:17.343 回答