实体框架正在组合我的表名和ID名

斯凯·博尼韦尔

这是一个奇怪的问题。我的实体框架核心项目将表格和ID合并为一列,如下所示:MonsterListMonsterId

这是错误:

Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid column name 'MonsterListMonsterId'

这是产生错误的控制器:

var treasuresByMonster = await _context.MonsterTreasures.Where(q => q.MonsterId == id).ToListAsync();

显然,该列称为MonsterId。不是MonsterListMonsterId。

这是MonsterList类:

public class MonsterList
{
    public MonsterList()
    {
        MonsterTreasures = new HashSet<MonsterTreasures>();
    }
    public Guid MonsterId { get; set; }
    public string MonsterText { get; set; }

    public virtual ICollection<MonsterTreasures> MonsterTreasures { get; set; }
}

这是MonsterTreasure类:

public partial class MonsterTreasures
{
    public Guid TreasureId { get; set; }
    public Guid? MonsterId { get; set; }
    public string TreasureText { get; set; }
    public MonsterList MonsterList { get; set; }

}

和上下文类:

modelBuilder.Entity<MonsterTreasures>(entity =>
{
    entity.HasKey(e => e.TreasureId);
    
    entity.HasOne(e => e.MonsterList)
        .WithMany(m => m.MonsterTreasures);
        
    entity.ToTable("MonsterTreasures");

    entity.Property(e => e.TreasureId)
        .HasColumnName("TreasureId");

    entity.Property(e => e.MonsterId)
        .HasColumnName("MonsterId");

    entity.Property(e => e.TreasureText)
        .HasColumnName("TreasureText");

});

什么是正确的解决方案?

谢谢!

伊万·斯托夫

问题在这里

public Guid? MonsterId { get; set; }
public MonsterList MonsterList { get; set; }

名称“ MonsterId”与任何EF Core常规FK属性名称都不匹配

  • <navigation property name><principal key property name>
  • <navigation property name>Id
  • <principal entity name><principal key property name>
  • <principal entity name>Id

因此,EF Core不会将其视为FK属性,而是假定异常消息中的阴影属性/列具有默认名称。

为了解决此问题,您必须通过[ForeignKey]在FK属性上指定导航属性名称的数据注释来显式地映射它

[ForeignKey(nameof(MonsterList)]
public Guid? MonsterId { get; set; }
public MonsterList MonsterList { get; set; }

或在导航属性上指定FK属性的名称:

public Guid? MonsterId { get; set; }
[ForeignKey(nameof(MonsterId)]
public MonsterList MonsterList { get; set; }

HasForeignKey在此处使用Fluent API:

entity.HasOne(e => e.MonsterList)
    .WithMany(m => m.MonsterTreasures)
    .HasForeignKey(e => e.MonsterId); // <--

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我想重命名在.NetCore中生成的ASPNET实体框架的表名吗?

来自分类Dev

实体框架中与表名串联的垃圾值

来自分类Dev

在实体框架6中更改默认联结表名

来自分类Dev

实体框架中数据注释中的表名不起作用。

来自分类Dev

实体框架:相似的表名在复数时会导致问题(数据库优先)

来自分类Dev

JPA 如何在用户表是连接的答案表中找到前 500 名,我们正在寻找用户 ID 等于某值的答案

来自分类Dev

实体框架-虚拟财产正在相应表中插入数据

来自分类Dev

BigQuery 可以使用通配符表名和 table_suffix,但我正在寻找类似通配符数据集和 dataset_suffix 的解决方案

来自分类Dev

ASP Identity用户和其他表之间的实体框架映射-更改ID列

来自分类Dev

具有实体框架和组合键的通用findById

来自分类Dev

实体框架代码优先,聚集索引和组合键

来自分类Dev

实体框架代码优先,聚集索引和组合键

来自分类Dev

配置实体时获取表名

来自分类Dev

c# - 如何通过实体框架代码的流畅API首先在c#中更改表名?

来自分类Dev

实体框架日期组合查询

来自分类Dev

SASS 我可以用字符串和列表值组合变量名吗

来自分类Dev

上传文件并保存日期和用户ID组合的文件名(Codeigniter)

来自分类Dev

MySQL别名和表名

来自分类Dev

矩阵和表名/暗号

来自分类Dev

相同的表名和列名

来自分类Dev

实体框架-视图与表

来自分类Dev

实体框架表约束

来自分类Dev

实体框架表约束

来自分类Dev

我可以在实体框架中从表转换为列表吗

来自分类Dev

实体框架查询返回我的主键加上$ id

来自分类Dev

实体框架在回叫时未提供我ID

来自分类Dev

如何使用LINQ和实体框架6进行表联接?

来自分类Dev

实体框架7和SQLite表未创建

来自分类Dev

如何使用LINQ和实体框架6进行表联接?

Related 相关文章

  1. 1

    我想重命名在.NetCore中生成的ASPNET实体框架的表名吗?

  2. 2

    实体框架中与表名串联的垃圾值

  3. 3

    在实体框架6中更改默认联结表名

  4. 4

    实体框架中数据注释中的表名不起作用。

  5. 5

    实体框架:相似的表名在复数时会导致问题(数据库优先)

  6. 6

    JPA 如何在用户表是连接的答案表中找到前 500 名,我们正在寻找用户 ID 等于某值的答案

  7. 7

    实体框架-虚拟财产正在相应表中插入数据

  8. 8

    BigQuery 可以使用通配符表名和 table_suffix,但我正在寻找类似通配符数据集和 dataset_suffix 的解决方案

  9. 9

    ASP Identity用户和其他表之间的实体框架映射-更改ID列

  10. 10

    具有实体框架和组合键的通用findById

  11. 11

    实体框架代码优先,聚集索引和组合键

  12. 12

    实体框架代码优先,聚集索引和组合键

  13. 13

    配置实体时获取表名

  14. 14

    c# - 如何通过实体框架代码的流畅API首先在c#中更改表名?

  15. 15

    实体框架日期组合查询

  16. 16

    SASS 我可以用字符串和列表值组合变量名吗

  17. 17

    上传文件并保存日期和用户ID组合的文件名(Codeigniter)

  18. 18

    MySQL别名和表名

  19. 19

    矩阵和表名/暗号

  20. 20

    相同的表名和列名

  21. 21

    实体框架-视图与表

  22. 22

    实体框架表约束

  23. 23

    实体框架表约束

  24. 24

    我可以在实体框架中从表转换为列表吗

  25. 25

    实体框架查询返回我的主键加上$ id

  26. 26

    实体框架在回叫时未提供我ID

  27. 27

    如何使用LINQ和实体框架6进行表联接?

  28. 28

    实体框架7和SQLite表未创建

  29. 29

    如何使用LINQ和实体框架6进行表联接?

热门标签

归档