C# 基于Fluent-Api的实体框架多列主键

C# 基于Fluent-Api的实体框架多列主键,c#,.net,entity-framework,entity-framework-5,C#,.net,Entity Framework,Entity Framework 5,这些是我的简化域类。 公共类ProductCategory { public int ProductId{get;set;} public int CategoryId{get;set;} 公共虚拟产品产品{get;set;} 公共虚拟类别{get;set;} } 公共类产品 { 公共int Id{get;set;} 公共字符串名称{get;set;} } 公共类类别 { 公共int Id{get;set;} 公共字符串名称{get;set;} public int?ParentCategor

这些是我的简化域类。

公共类ProductCategory
{
public int ProductId{get;set;}
public int CategoryId{get;set;}
公共虚拟产品产品{get;set;}
公共虚拟类别{get;set;}
}
公共类产品
{
公共int Id{get;set;}
公共字符串名称{get;set;}
} 
公共类类别
{
公共int Id{get;set;}
公共字符串名称{get;set;}
public int?ParentCategoryId{get;set;}
} 
这是我的映射类。但它不起作用。

公共类ProductCategoryMap:EntityTypeConfiguration
{
公共产品类别映射()
{
ToTable(“产品类别”);
HasKey(pc=>pc.ProductId);
HasKey(pc=>pc.CategoryId);
}
}

我应该如何映射这些类以提供,以便在多个类别中看到一个产品?

使用匿名类型对象,而不是两个单独的语句:

HasKey(pc=>new{pc.ProductId,pc.CategoryId});
从Microsoft文档:

如果主键由多个属性组成,请指定包含这些属性的匿名类型。例如,在C#
t=>new{t.Id1,t.Id2}
中,以及在visualbasic.Net
函数(t)中,使用{t.Id1,t.Id2}
新建


令人沮丧的是,特别是如果你碰巧不熟练的lambda,MSDN VB的例子是错误的。。。那应该是“With”,而不是“From”


(谢谢)

对于我来说,在VB.NET中,是带有{t.Id1,t.id2}的
函数(t)完成了这个技巧(而不是“From”)。是否可以转换包含两个字段的非原语值对象<代码>公共类MyId{public int CompanyId;public int UserId}