【发布时间】:2026-02-22 10:30:01
【问题描述】:
我们有一个使用 Web Api 和实体框架的电子商务网站。我最近为一个名为“BundleProduct”的实体创建了一个 ApiController。当我在控制器上调用 GET 方法时,我得到一个 System.Data.SqlClient.SqlException: "Invalid object name 'dbo.BundleProducts1'。"
使用 VS 调试器,这是正在执行的查询(此表中只有两列,共同构成一个主键):
SELECT
[Extent1].[Fk_BundleID] AS [Fk_BundleID],
[Extent1].[Fk_ProductID] AS [Fk_ProductID]
FROM [dbo].[BundleProducts1] AS [Extent1]
没有“BundleProducts1”表,应该叫“BundleProducts”。我在代码中进行了搜索,找不到任何使用名称“BundleProducts1”的实例。
BundleProducts 表表示“Bundles”表和“Products”表之间的多对多关系。这个特定的表只有两列,两者都是主键。我确实查看了 DbContext 类,它对 BundleProducts 的唯一引用是:
public DbSet<BundleProduct> BundleProducts { get; set; }
modelBuilder.Entity<Bundle>()
.HasMany(e => e.Products)
.WithMany(e => e.Bundles)
.Map(m => m.ToTable("BundleProducts")
.MapLeftKey("Fk_BundleID")
.MapRightKey("Fk_ProductID"));
为什么 EF 会在表名后附加“1”,我该怎么做才能更改?
【问题讨论】:
-
当你有两个外键映射到同一个表中的不同记录时,我见过 EF 这样做,但我还没有看到它把表名弄错了。你能发布整个 DbContext 吗?
-
Entity Framework 使用数字来解决名称冲突,因此您很有可能遇到名称冲突。我会: 1. 寻找有冲突的课程。 2. 确保一切都是最新的。
-
@victor - 我无法发布整个 DBContext,数据库中有数百个表。
-
@MarkBeleski - 我在项目中进行了搜索,没有冲突的类。
标签: entity-framework asp.net-web-api2