【发布时间】:2020-06-17 13:36:55
【问题描述】:
我有一个旧数据库,其中的表只有 一行 没有主键。当我尝试更新这一行时,什么也没有发生。我搜索了很多,找到了这行代码(dbf.Entry(nextPro).State = EntityState.Modified;)。添加此代码时出现错误:“无法跟踪 'NxtId' 类型的实例,因为它没有主键。只能跟踪具有主键的实体类型。”
我无法删除该行并添加一个新行。我无法添加主键。我只有以某种方式更新行的唯一选择。
var nextPro = dbf.NxtId.FirstOrDefault();
nextPro.ProductNo = 239071;
dbf.Entry(nextPro).State = EntityState.Modified;
dbf.SaveChanges();
实体:
public partial class NxtId
{
public int? ProductNo { get; set; }
public int? Uid { get; set; }
[Key]
public int? SatCode { get; set; }
}
【问题讨论】:
-
尝试禁用
ChangeTracker -
如果我禁用 ChangeTracker,它如何知道有更新?我试图打开它(因为它没有保存更改),但我收到了解释为什么它没有保存更改的错误(没有主键)。
-
如果表有另一列,您可以将其定义为 EF 中的键(如添加 [Key] 属性)。如果你只有一行,它甚至会是独一无二的。
-
我将 [Key] 注释添加到另一个不变的列中。它没有帮助。仍然得到:无法跟踪“NxtId”类型的实例,因为它没有主键。只能跟踪具有主键的实体类型。
-
这篇文章可能对你有帮助 stackoverflow.com/questions/15381233/….