Fluent API 外键 - Code First
Foreign Key with Fluent API - Code First
我正在尝试使用 FluentAPI 为 2 classes 建立外键,但在实现它的过程中有点困惑。
ApplicationUser
使用 ASP.NET 身份模型并将 UserId 作为字符串
public class ApplicationUser : IdentityUser
{
public virtual List<UserProduct> Orders { get; set; }
}
Product
在 ProductID
和 ProductCategoryID
列上有一个组合键
public class Product
{
public int ProductID { get; set; }
public string ProductCategoryID { get; set; }
public virtual List<UserProduct> Orders { get; set; }
...
}
和另一个 class UserProduct
将在 ApplicationUser
和 Product
table
之间具有多对多关系
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});
如何建立UserProduct
与ApplicationUser
和Product
的外键关系?
您可以将 id-属性(例如 OrderId)添加到 class UserProduct 并使用此代码通过外键连接实体。
modelBuilder.Entity<UserProduct>()
.HasRequired(x => x.User)
.WithMany(u => u.Orders)
.HasForeignKey(x => x.OrderId);
我正在尝试使用 FluentAPI 为 2 classes 建立外键,但在实现它的过程中有点困惑。
ApplicationUser
使用 ASP.NET 身份模型并将 UserId 作为字符串
public class ApplicationUser : IdentityUser
{
public virtual List<UserProduct> Orders { get; set; }
}
Product
在 ProductID
和 ProductCategoryID
public class Product
{
public int ProductID { get; set; }
public string ProductCategoryID { get; set; }
public virtual List<UserProduct> Orders { get; set; }
...
}
和另一个 class UserProduct
将在 ApplicationUser
和 Product
table
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});
如何建立UserProduct
与ApplicationUser
和Product
的外键关系?
您可以将 id-属性(例如 OrderId)添加到 class UserProduct 并使用此代码通过外键连接实体。
modelBuilder.Entity<UserProduct>()
.HasRequired(x => x.User)
.WithMany(u => u.Orders)
.HasForeignKey(x => x.OrderId);