Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Core 2.1只是在加载和保存时更新ID_C#_Entity Framework Core_Ef Core 2.0 - Fatal编程技术网

C# EF Core 2.1只是在加载和保存时更新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

当我在数据库中加载和保存值时,EFCore2.1正在更新ID

注意:我使用的是数据库优先的方法

错误:无法更新标识列“ID”

 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时将其标记为已修改吗?