EF编码首表关系

本文关键字:关系 编码 EF | 更新日期: 2023-09-27 18:29:06

我正在尝试首先使用代码学习EF,我不知道如何使用这种方法进行正确的设计。请帮我

我的课看起来像这个

public class Item
{
  public int ItemID{ get; set; }
  public string Name { get; set; }
  public int StockUnitOfMeasure{ get; set; }
  public int PurchaseUnitOfMeasure{ get; set; }
}
public class UnitOfMeasure 
{
  public int UnitOfMeasureID { get; set; }
  public string MeasureName { get; set; }
}

我想把StockUnitOfMeasurePurchaseUnitOfMeasure作为外键。

这是他的样本数据

ItemID      Name    StockUnitOfMeasure  PurchaseUnitOfMeasure
1          Apples     2                     1
2          Milk       3                     4
UnitOfMeasureID      MeasureName 
1                    Piece
2                    Dozen
3                    Box
4                    Packs
meaning: 
apples are stocked at the warehouse by DOZEN, but will be purchased per PIECE
Milks  are stocked at the warehouse by BOX, but will be purchased per PACK

EF编码首表关系

为了清晰和惯例,我在FK属性后面加了Id。您可以重命名这些以满足您的需要。

public class Item
{
  public int ItemID { get; set; }
  public string Name { get; set; }
  public int StockUnitOfMeasureId { get; set; }
  public UnitOfMeasure StockUnitOfMeasure { get; set; }
  public int PurchaseUnitOfMeasureId { get; set; }
  public UnitOfMeasure PurchaseUnitOfMeasure { get; set; }
}
class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Item>().HasRequired(x => x.StockUnitOfMeasure)
           .WithMany()
           .HasForeignKey(x => x.StockUnitOfMeasureId).WillCascadeOnDelete(true);
        modelBuilder.Entity<Item>().HasRequired(x => x.PurchaseUnitOfMeasure)
           .WithMany()
           .HasForeignKey(x => x.PurchaseUnitOfMeasureId).WillCascadeOnDelete(true); 
      base.OnModelCreating(modelBuilder);
    }
}