一个星期以来,我一直在努力改变数据库中的值,但无法找出我做错了什么。我设法创建表,添加和删除实体,但我无法更改实体内的值。
我得到的错误是:实体类型 'Generation' 上的属性 'Rating' 是键的一部分,因此不能修改或标记为已修改。要更改具有标识外键的现有实体的主体,首先删除依赖项并调用“SaveChanges”,然后将依赖项与新主体关联。
(我不习惯术语主体,但我认为它是具有唯一键的实体。我也不习惯 在数据库上下文中使用术语依赖,但我认为它是另一个表中的实体,它与的主要)
仅供参考:我正在使用 Microsoft.AspNetCore.All 2.0.0、Microsoft.EntityFrameworkCore 2.0.0 和 Npgsql.EntityFrameworkCore.PostgreSQL 2.0.0
我确定此错误消息试图告诉我解决方案,但据我所知,没有任何依赖于Rating并且它不是关键。这里的上下文是我用于数据库中表的两个类:
[Table("Generation")]
public class Generation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int GenerationId { get; set; }
[Required]
[MaxLength(100)]
public string DNA { get; set; }
//[Editable(true)]
public double Rating { get; set; }
public Generation(int ID, string dna, double rate)
{
GenerationId = ID;
DNA = dna;
Rating = rate;
}
public Generation()
{
}
}
[Table("Device")] …Run Code Online (Sandbox Code Playgroud) 我刚刚通过打开ALLOW_SNAPSHOT_ISOLATION来启用更改跟踪,执行此查询以打开数据库的更改跟踪
ALTER DATABASE [DatabaseName]
SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS,AUTO_CLEANUP = ON)
Run Code Online (Sandbox Code Playgroud)
并最终将其启用
ALTER TABLE [TableName]
ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF)
Run Code Online (Sandbox Code Playgroud)
现在当我打电话时
SELECT *
FROM CHANGETABLE(CHANGES, 0)
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
对象名称“CHANGETABLE”无效。
数据库版本是SQL Server 2012。如何CHANGETABLE无效以及如何使其工作?我认为它可以开箱即用,因为它是一个系统功能。它甚至在 SQL Server Management Studio 中突出显示。我在打开更改跟踪和调用之间修改了一些数据CHANGETABLE()。
t-sql sql-server change-tracking invalid-object-name sql-server-2012