C# EF Core 2.1只是在加载和保存时更新ID
当我在数据库中加载和保存值时,EFCore2.1正在更新ID 注意:我使用的是数据库优先的方法 错误:无法更新标识列“ID”C# EF Core 2.1只是在加载和保存时更新ID,c#,entity-framework-core,ef-core-2.0,C#,Entity Framework Core,Ef Core 2.0,当我在数据库中加载和保存值时,EFCore2.1正在更新ID 注意:我使用的是数据库优先的方法 错误:无法更新标识列“ID” string passportNumber = string.Empty; using (ApplicationDbContext db = new ApplicationDbContext(connectionString)) { using (IDbContextTransaction transaction = db
string passportNumber = string.Empty;
using (ApplicationDbContext db = new ApplicationDbContext(connectionString))
{
using (IDbContextTransaction transaction = db.Database.BeginTransaction())
{
try
{
TLifting Lifting = new TLifting();
if (!string.IsNullOrEmpty(PassportNumber))
{
Lifting = db.TLifting.FirstOrDefault();
}
Lifting.Col1 = "TEST"
if (Lifting.PassportId == 0)
{
db.TLifting.Add(Lifting);
}
else
{
db.Entry(Lifting).State = EntityState.Modified;
}
db.SaveChanges();
transaction.Commit();
}
catch (Exception e)
{
}
}
}
实体
CREATE TABLE [dbo].[T_Lifting](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PassportID] [int] NOT NULL,
[PassportTypeID] AS ((5)) PERSISTED NOT NULL,
CONSTRAINT [PK_T_Lifting_1] PRIMARY KEY CLUSTERED
(
[PassportID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [IX_T_Lifting] UNIQUE NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[T_Lifting] WITH CHECK ADD CONSTRAINT [FK__T_Lifting__T_Passport] FOREIGN KEY([PassportID], [PassportTypeID])
REFERENCES [dbo].[T_Passport] ([PassportID], [PassportTypeID])
GO
ALTER TABLE [dbo].[T_Lifting] CHECK CONSTRAINT [FK__T_Lifting__T_Passport]
GO
Passport和Piping表有一个关系和ID列标识列。可能以下设置对您有帮助: 在
protectedoverrideonModelCreating(ModelBuilder ModelBuilder){}
方法中,相应地编写下面的代码行
modelBuilder.Entity<Type>().Property(u => u.ID).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
modelBuilder.Entity().Property(u=>u.ID).Metadata.SetAfterSaveBehavior(propertySaveBhavior.Ignore);
注意:这里
Type
将是您的类模型/对象。我不想忽略这个行为,我只是不想为ID生成更新查询,因为我没有更新itOkay,那么您可以尝试放置db.update(lifting).Property(x=>x.ID)。IsModified=false;就在db.SaveChanges()之前;谢谢@Salahuddin,它确实解决了ID问题,但现在又出现了一个不同的ID问题。但是为什么我应该将它标记为已修改,而实际上我没有修改它,为什么它会自动标记为已修改?对不起,我没有理解您现在面临的不同ID问题的要点;)因为我没有解释。您能告诉我为什么EF在我们没有修改ID时将其标记为已修改吗?