C# EF代码第一表关系

C# EF代码第一表关系,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我试图先用代码学习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 UnitOfMe

我试图先用代码学习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; }
}
我想将
StockUnitOfMeasure
PurchaseUnitOfMeasure
作为外键

这是他的样本数据

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

为了清晰和约定,我在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);
    }
}
公共类项目
{
公共int ItemID{get;set;}
公共字符串名称{get;set;}
public int StockUnitOfMeasureId{get;set;}
公共度量单位StockUnitOfMeasure{get;set;}
public int PurchaseUnitOfMeasureId{get;set;}
公共度量单位购买度量单位{get;set;}
}
类MyContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(x=>x.StockUnitOfMeasure)
.有很多
.HasForeignKey(x=>x.StockUnitOfMeasureId)。将级联删除(true);
modelBuilder.Entity().HasRequired(x=>x.PurchaseUnitOfMeasure)
.有很多
.HasForeignKey(x=>x.PurchaseUnitOfMeasureId)。将级联删除(true);
基于模型创建(modelBuilder);
}
}

为了清晰和约定,我在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);
    }
}
公共类项目
{
公共int ItemID{get;set;}
公共字符串名称{get;set;}
public int StockUnitOfMeasureId{get;set;}
公共度量单位StockUnitOfMeasure{get;set;}
public int PurchaseUnitOfMeasureId{get;set;}
公共度量单位购买度量单位{get;set;}
}
类MyContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(x=>x.StockUnitOfMeasure)
.有很多
.HasForeignKey(x=>x.StockUnitOfMeasureId)。将级联删除(true);
modelBuilder.Entity().HasRequired(x=>x.PurchaseUnitOfMeasure)
.有很多
.HasForeignKey(x=>x.PurchaseUnitOfMeasureId)。将级联删除(true);
基于模型创建(modelBuilder);
}
}

非常感谢您的快速回答,但是我遇到了这个错误{“引用关系将导致不允许的循环引用。[约束名称=Item\u PurchaseUnitOfMeasure]”}@samantha07将
.WillCascadeOnDelete(true)
设置为
.WillCascadeOnDelete(false)
。非常感谢您的快速回答,但是我遇到了这个错误{“引用关系将导致循环引用,这是不允许的。[约束名称=Item\u PurchaseUnitOfMeasure]”}@samantha07将
.WillCascadeOnDelete(true)
设置为
。WillCascadeOnDelete(false)