[英]Entity Framework is appending “1” to table name and query is failing
我們有一個使用Web Api和Entity Framework的電子商務網站。 我最近為一個名為“BundleProduct”的實體創建了一個ApiController。 當我在控制器上調用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
的隱藏關聯類。
問題是你還添加了一個可見的類BundleProducts
。 EF嘗試按照您的指示執行操作:將兩個類映射到表,然后遇到名稱沖突。 可見類是受害者並被重命名。
您必須從模型中刪除可見類,或者將多對多映射轉換為兩個一對多映射,其中間包含BundleProducts
: Bundle 1 - n BundleProduct n - Product
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.