使用Fluent API的外键 - 代码优先

时间:2015-08-19 08:23:57

标签: c# ef-code-first ef-fluent-api

我正在尝试使用FluentAPI为2个类创建外键,并对实现它的方式感到困惑。

ApplicationUser使用ASP.NET Identity模型,并将UserId作为字符串

public class ApplicationUser : IdentityUser
{
     public virtual List<UserProduct> Orders { get; set; }
}

Product在列ProductIDProductCategoryID上有一个复合键

public class Product 
{
    public int ProductID { get; set; }
    public string ProductCategoryID { get; set; }

    public virtual List<UserProduct> Orders { get; set; }

    ...
}

以及UserProductApplicationUser表之间存在多对多关系的另一个类Product

public partial class UserProduct
{
    public string UserId { get; set; }

    public int ProductID { get; set; }
    public string ProductCategoryID { get; set; }

    public virtual ApplicationUser User { get; set; }

    public virtual Product Product { get; set; }
}

FluentAPI代码如下所示

 modelBuilder.Entity<Product>().Property(t => t.ProductID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
 modelBuilder.Entity<Product>().HasKey(x => new { x.ProductID, x.ProductCategoryID  });

 modelBuilder.Entity<UserProduct>().HasKey(x => new {x.UserId, x.ProductID, x.ProductCategoryID});

如何建立UserProductApplicationUserProduct的外键关系?

1 个答案:

答案 0 :(得分:1)

您可以将id-property(例如OrderId)添加到UserProduct类,并使用此代码通过外键连接实体。

modelBuilder.Entity<UserProduct>()
            .HasRequired(x => x.User) 
            .WithMany(u => u.Orders) 
            .HasForeignKey(x => x.OrderId);