【问题标题】:How to setting a model with table don't have any primary key column如何使用表设置模型没有任何主键列
【发布时间】:2017-08-22 17:30:13
【问题描述】:

在设置DbContext,我们有

modelBuilder.Entity<Person>(app =>
{
    app.ToTable("Person");
});

EFCore 抛出异常:

实体类型“Person”需要定义一个主键

但是我们的Person 表没有任何主键列。

如何避免这种情况?

【问题讨论】:

  • 作为数据库标准化的一部分,您应该引入一个主键列。即使这意味着一个简单的AUTO_INCREMENT int 值。您可能永远不会使用主键,但它的存在非常有用。
  • @我明白了,但是在这种情况下,更改表结构不是首选,因为我们处于迁移模式
  • 所有 EF 版本(包括最新的 Core)不支持没有 PK 的实体。我不认为它会改变,所以你必须将一些列映射为 PK。
  • 我建议使用中间人算法创建一个新的目标表,以手动获取旧数据并将其插入表中,同时创建递增的主键。如果可能的话,要么选择现有字段作为主键。
  • 如果它没有主键,那么 EF 不能使用它 - 句号。

标签: c# entity-framework asp.net-core .net-standard entity-framework-core


【解决方案1】:

EF Core 不支持没有主键的表(又名堆)。原因很简单:它需要能够操作单个记录,这是没有主键就无法安全实现的。 作为解决方案,您可以添加一个 int/identity 或 guid/uniqueidentifier 类型的虚拟列/主键,然后忽略它。

【讨论】:

  • 如果是只读数据库,不能更改表结构
  • 是的,但问题没有提到任何关于只读数据库的内容。
猜你喜欢
  • 2015-04-26
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2015-05-26
  • 2019-11-17
  • 1970-01-01
相关资源
最近更新 更多