gpt4 book ai didi

c# -\如果另一个实体与表同名,则无法将实体映射到表

转载 作者:太空狗 更新时间:2023-10-29 21:51:49 28 4
gpt4 key购买 nike

我正在针对现有数据库进行 EF Code First 开发。由于我得到了一个模式并且一些表名不理想,我想命名某些实体类而不是基础表并在 OnModelCreating 中执行映射。

如果实体类名称与现有表名称冲突,这似乎不起作用,即使我在代码中重新映射它们也是如此。

给定这些(为这个例子弥补)实体类:

  • 小工具
  • 小工具

我正在尝试在 OnModelCreating 中执行以下映射:

modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");

在运行时,这会产生以下错误:

System.InvalidOperationException : The entity types 'Widget' and 'Gadget' cannot share table 'Gadget' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them.

这没有意义,因为我将 Gadget 实体从 Gadget 表中映射出来,但即使我明确指定了某些映射,它似乎也会自动发生。

对此行为的解释是什么,是否可以解决?

最佳答案

您的实体和表名是否为单数?

我问的原因是如果你想做类似的事情

modelBuilder.Entity<Gadget>.ToTable("Sprockets")
modelBuilder.Entity<Widget>.ToTable("Gadgets")

它可能不起作用,因为 EF:CF 按照惯例将实体映射到它们的复数表。如果您想删除此约定,只需删除 PluralizingTableNameConvention .

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

关于c# -\如果另一个实体与表同名,则无法将实体映射到表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765416/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com