Entity Framework Multiple Column as Primary Key by Fluent Api

C#.NetEntity FrameworkEntity Framework-5

C# Problem Overview


These are my simplified domain classes.

public class ProductCategory
{
	public int ProductId { get; set; }
	public int CategoryId { get; set; }

	public virtual Product Product { get; set; }
	public virtual Category Category { get; set; }
}

public class Product
{
	public int Id { get; set; }
	public string Name { get; set; }
} 

public class Category
{
	public int Id { get; set; }
	public string Name { get; set; }
	public int? ParentCategoryId { get; set;} 
} 

This is my mapping class. But it doesn't work.

public class ProductCategoryMap : EntityTypeConfiguration<ProductCategory>
{
	public ProductCategoryMap()
	{
		ToTable("ProductCategory");
		HasKey(pc => pc.ProductId);
		HasKey(pc => pc.CategoryId);
	}
}

How should I map these classes to provide, so that one product can be seen in multiple categories?

C# Solutions


Solution 1 - C#

Use anonymous type object instead of 2 separated statements:

HasKey(pc => new { pc.ProductId, pc.CategoryId });

From Microsoft Docs: EntityTypeConfiguration.HasKey Method

> If the primary key is made up of multiple properties then specify an anonymous type including the properties. For example, in C# t => new { t.Id1, t.Id2 } and in Visual Basic .Net Function(t) New With { t.Id1, t.Id2 }.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBarış VelioğluView Question on Stackoverflow
Solution 1 - C#MarcinJuraszekView Answer on Stackoverflow