【发布时间】:2017-08-22 17:30:13
【问题描述】:
在设置DbContext,我们有
modelBuilder.Entity<Person>(app =>
{
app.ToTable("Person");
});
EFCore 抛出异常:
实体类型“Person”需要定义一个主键
但是我们的Person 表没有任何主键列。
如何避免这种情况?
【问题讨论】:
-
作为数据库标准化的一部分,您应该引入一个主键列。即使这意味着一个简单的
AUTO_INCREMENTint 值。您可能永远不会使用主键,但它的存在非常有用。 -
@我明白了,但是在这种情况下,更改表结构不是首选,因为我们处于迁移模式
-
所有 EF 版本(包括最新的 Core)不支持没有 PK 的实体。我不认为它会改变,所以你必须将一些列映射为 PK。
-
我建议使用中间人算法创建一个新的目标表,以手动获取旧数据并将其插入表中,同时创建递增的主键。如果可能的话,要么选择现有字段作为主键。
-
如果它没有主键,那么 EF 不能使用它 - 句号。
标签: c# entity-framework asp.net-core .net-standard entity-framework-core