我有一个"项目";表定义如下:
item_id
Name
Description
itemseries_id
itemtype_id
itemcondition_id
然后我有了";ItemForSale";表:
itemforsale_id
item_id
price
date_added
实体:
public class Item
{
public int ItemId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int ItemSeriesId { get; set; }
public ItemSeries ItemSeries { get; set; }
public int ItemConditionId { get; set; }
public ItemCondition ItemCondition { get; set; }
public int ItemTypeId { get; set; }
public ItemType ItemType { get; set; }
public List<ItemTag> ItemTags { get; set; }
public List<ItemImage> ItemImages { get; set; }
public List<ItemPurchase> ItemPurchases { get; set; }
public List<ItemSale> ItemSales { get; set; }
}
public class ItemForSale
{
public int ItemForSaleId { get; set; }
public decimal Price { get; set; }
public DateTime AddedDate { get; set; }
public int ItemId { get; set; }
public Item Item { get; set; }
}
在这两者之间如何使用FluentAPI?我知道我可以在Item实体类中添加对ItemForSale的引用,但这对我来说没有意义。到目前为止,我已经映射了所有的一对一和多对多关系,但Item和ItemForSale之间的关系让我很困惑。
注意:我在区分已作为"商品"出售的商品;销售";或";ItemSale";而在没有买家的情况下出售的物品则被称为"商品";ItemForSale";
从EF核心文档中,您可以执行以下操作:
class MyContext : DbContext
{
public DbSet<Item> Items { get; set; }
public DbSet<ItemSale> ItemSales { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ItemSale>()
.HasOne(p => p.Item)
.WithMany(b => b.ItemSales)
.HasForeignKey(p => p.ItemId)
.IsRequired(false);
}
}
public class Item
{
public int ItemId { get; set; }
public string Url { get; set; }
public List<ItemSale> ItemSales { get; set; }
}
public class ItemSale
{
public int ItemSaleId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public Item Item { get; set; }
// note that the reference id is nullable
public int? ItemId { get; set; }
}
然后,将模型类中的属性ItemId
标记为int?
。在EF 6上,我们有HasOptional
配置选项,但在EF Core上,如果引用属性可以为null,则假设该属性从0开始,就像0..N
一样。我认为,在这种情况下,甚至不需要IsRequired(false)
,但现在它开始了。