我正在尝试创建一个 Blazor 服务器来为我的组织连接旧数据库。
但是,EFCore 似乎无法在无键表中添加/更改记录。
我看到了这篇文章,当我使用复合键添加记录时它起作用了:
的定义地区、用户、职位
modelBuilder.Entity<Record>().HasKey(r=> new {r.User,r.Position,r.Region});
基本上,当用户插入新区域的记录时,新输入值之后的位置将会改变。
(输入Position = 10,10之后的所有int都会像排队一样加1)
当我编辑涉及复合键(位置)的记录时,返回错误
The property 'Record.Position' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity with an identifying foreign key, first delete the dependent and invoke 'SaveChanges', and then associate the dependent with the new principal.
。
我可以在不实际向表中添加主键的情况下编辑记录吗?
正如错误所说,您不能直接更新属于复合键一部分的属性...但您始终可以搜索它,删除它并使用您的更改添加一个新实体:它是相同的;););)
附注Fluent API .HasKey(r=> new {r.User,r.Position,r.Region}); 定义了一个复合主键。
那么,为什么它有复合钥匙却是无钥匙的呢?根据 SQL 定义,表需要 PK 来唯一标识行。根据您自己的说法,它有一个(复合)键。因此,blazor 应用程序错误地“假装”没有密钥。
解决这个问题 - 完成。
您无法编辑该表,因为任何更新都可能会触及多行 - 这就是 SL 的定义方式,问题完全在于您不愿意向 EF 提供您拥有的信息。