簡體   English   中英

實體框架將“1”附加到表名稱並且查詢失敗

[英]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嘗試按照您的指示執行操作:將兩個類映射到表,然后遇到名稱沖突。 可見類是受害者並被重命名。

您必須從模型中刪除可見類,或者將多對多映射轉換為兩個一對多映射,其中間包含BundleProductsBundle 1 - n BundleProduct n - Product

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM