相关疑难解决方法(0)

实体框架CodeFirst与其他信息的多对多关系

我有以下型号:

class Contract
{
   string ContractID{get;set;}
   ICollection<Part> Parts{get;set;}
}

class Part
{
   string PartID{get;set;}
   ICollection<Contract> Contracts{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

问题是Part和Contract之间的关系还包含以下附加信息:

class ContractParts
{ 
   Contract{get;set;}
   Part{get;set;}
   Date{get;set;} //additional info
   Price{get;set;} //additional info
}
Run Code Online (Sandbox Code Playgroud)

我将如何为此编写实体上下文?

.net c# entity-framework ef-code-first entity-framework-4.1

27
推荐指数
2
解决办法
2万
查看次数

实体框架将"1"附加到表名称并且查询失败

我们有一个使用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",我该怎么做才能改变它?

entity-framework asp.net-web-api2

3
推荐指数
1
解决办法
521
查看次数