gpt4 book ai didi

entity-framework - EF 7 身份插入问题

转载 作者:行者123 更新时间:2023-12-03 23:39:13 25 4
gpt4 key购买 nike

我必须能够设置我尝试添加到列表“final_zones”中的实体的主键。我有一个 Controller 构造函数如下:

    public UtilController(CFETSContext context)
{
_context = context;
}
......Then in a web api method.........
using (var transaction = _context.Database.BeginTransaction())
{
_context.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT [CFETSWeb].[dbo].[Zone] ON");

_context.SaveChanges();
transaction.Commit();
}


using (var transaction = _context.Database.BeginTransaction())
{
_context.Zones.AddRange(final_zones);
_context.SaveChanges(); //ERROR HERE
transaction.Commit();
}

无论我做什么,我似乎都无法打开 IDENTITY_INSERT。我收到以下错误:

{"Cannot insert explicit value for identity column in table 'Zone' when IDENTITY_INSERT is set to OFF."}

我似乎无法将其关闭。我可以将实体添加到 Controller 中的数据库中,因此我知道其他一切都正常。我也尝试过在没有交易的情况下执行此操作,并得到相同的结果。

 _context.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT [CFETSWeb].[dbo].[Zone] ON"); 
_context.Zones.AddRange(final_zones);
_context.SaveChanges();

有什么想法吗?我不知道下一步该尝试什么。谢谢。

最佳答案

我用以下方法解决了这个问题:

       using (var dbContextTransaction = _context.Database.BeginTransaction())
{
try
{
_context.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT [CFETSWeb].[dbo].[Zone] ON");
_context.Zones.AddRange(final_zones);
_context.SaveChanges();

dbContextTransaction.Commit();
}
catch (Exception e)
{
dbContextTransaction.Rollback();
}
}

注意:您必须对每个表执行此操作。 IDENTITY_INSERT 似乎一次只能为 1 个表设置,因此您可以这样做或在同一事务中将其切换为 OFF。

此外,IDENTITY_INSERT 必须位于事务中,因为它仅在事务持续时间内保持打开状态。

关于entity-framework - EF 7 身份插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com