Des*_*xAZ 3 entity-framework asp.net-web-api2
我们有一个使用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]
Run Code Online (Sandbox Code Playgroud)
没有"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"));
Run Code Online (Sandbox Code Playgroud)
为什么EF在表名后附加"1",我该怎么做才能改变它?
当您使用多对多映射(HasMany - WithMany)时,EF将使用名为的隐藏关联类BundleProducts.
问题是你还添加了一个可见的类BundleProducts.EF尝试按照您的指示执行操作:将两个类映射到表,然后遇到名称冲突.可见类是受害者并被重命名.
您必须从模型中删除可见类,或者将多对多映射转换BundleProducts为中间的两个一对多映射:Bundle 1 - n BundleProduct n - Product.
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |