C# 在创建主键字段之前获取该字段的下一个值

C# 在创建主键字段之前获取该字段的下一个值,c#,asp.net-mvc,entity-framework,ef-code-first,C#,Asp.net Mvc,Entity Framework,Ef Code First,在实际创建会话变量之前,我需要将要创建的下一个ID的值分配给会话变量 我使用了下面的代码,但是idd总是导致0 T_Order objorder = new T_Order(); int id = ((int)Session["logged_in"]); var date = DateTime.Now; if (Session["Order"] == null) { objorder.CreatedDate = DateTime.Now; objorder.ModifiedD

在实际创建会话变量之前,我需要将要创建的下一个ID的值分配给会话变量

我使用了下面的代码,但是
idd
总是导致
0

T_Order objorder = new T_Order();

int id = ((int)Session["logged_in"]);
var date = DateTime.Now;

if (Session["Order"] == null)
{
    objorder.CreatedDate = DateTime.Now;
    objorder.ModifiedDate = DateTime.Now;
    objorder.DeliveryDate = date.AddDays(10);
    objorder.User_ID = id;
    objorder.OrderStatus_ID = 1;
    objorder.OfferType_ID = 16;
    objorder.TypeOfOrder_ID = 2;
    context.T_Order.Add(objorder);
    Session["Order"] = objorder.ID;
}

int idd = (int)Session["Order"];

如何获得正确答案?

我假设您的主键使用了自动递增的标识字段。在这种情况下,实体框架在保存之前不会生成它的值。有道理,在保存之前,如何知道值应该是什么


没有理由不在创建实体时保存实体,然后分配会话变量。保留它可能会导致其他问题,例如实体无法连接到上下文

我假设您的主键使用了自动递增的标识字段。在这种情况下,实体框架在保存之前不会生成它的值。有道理,在保存之前,如何知道值应该是什么


没有理由不在创建实体时保存实体,然后分配会话变量。保留它可能会导致其他问题,例如实体无法连接到上下文

使用自动递增的数据库键。不要尝试创建一个(除非它是
Guid
)。如果多个用户正在创建一个
订单
,则所有用户都将使用自动递增的数据库密钥。不要尝试创建一个(除非它是
Guid
)。如果多个用户正在创建一个
订单
,则所有订单都将失败