在ASP .NET Core MVC,Entity Framework和Identity中,可以使用由外键组成的组合键作为实体的主键。以下是如何在代码中实现它的方法。
首先,在实体类中定义外键并将它们作为组合键的一部分:
public class Order
{
public int OrderId { get; set; }
// Define foreign keys
public int CustomerId { get; set; }
public int ProductId { get; set; }
// Set up composite key
public virtual Customer Customer { get; set; }
public virtual Product Product { get; set; }
public decimal Price { get; set; }
}
然后,使用Fluent API配置组合键:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasKey(o => new { o.CustomerId, o.ProductId });
// Define foreign key relationships
modelBuilder.Entity()
.HasOne(o => o.Customer)
.WithMany(c => c.Orders)
.HasForeignKey(o => o.CustomerId);
modelBuilder.Entity()
.HasOne(o => o.Product)
.WithMany(p => p.Orders)
.HasForeignKey(o => o.ProductId);
}
现在,组合键由外键构成,并在数据库中被定义为主键。
要查询具有组合键的实体,可以使用以下示例代码:
var order = context.Orders
.Where(o => o.CustomerId == customerId && o.ProductId == productId)
.FirstOrDefault();