gpt4 book ai didi

entity-framework - Entity Framework 将 "1"附加到表名并且查询失败

转载 作者:行者123 更新时间:2023-12-03 23:39:17 24 4
gpt4 key购买 nike

我们有一个使用 Web Api 和 Entity Framework 的电子商务网站。我最近为名为“BundleProduct”的实体创建了一个 ApiController。当我在 Controller 上调用 GET 方法时,我得到一个 System.Data.SqlClient.SqlException:“无效的对象名称‘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”,我可以做些什么来改变它?

最佳答案

当您使用多对多映射 (HasMany - WithMany) 时,EF 将使用名为 BundleProducts隐藏关联类。

问题是您还添加了一个visibleBundleProducts。 EF 尝试执行您指示它执行的操作:将两个类映射到一个表,然后遇到名称冲突。 visible 类被牺牲并被重命名。

您要么必须从模型中删除可见类,要么将多对多映射转换为两个一对多映射,中间使用 BundleProducts:Bundle 1 - n BundleProduct n - 产品

关于entity-framework - Entity Framework 将 "1"附加到表名并且查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43265200/

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