首先是EF代码,一到(零或多)?

时间:2017-04-30 08:15:05

标签: c# entity-framework

我可能会想到这完全错误并且可以解释为什么我在谷歌上找不到答案,但是,您可以先在EF代码中找到一对(零或多)关系吗?

实施例

public class Item1
{
     public int Id {get;set;}

     public virtual ICollection<Item2> Item2List {get;set;}
}

public class Item2
{
     public int Id {get;set;}

     public int Item1Id {get;set;}

     public virtual Item1 Item1 {get;set;}
}

所以从上面我希望规则是这样的。

  • Item1可以有多个或零Item2,并且在出现时不需要任何内容 添加到数据库中。
  • 如果删除Item1,则会将其级联到Item2List中的任何内容。
  • Item2需要1 Item1
  • 如果Item2被删除,则不会影响Item1

编辑:

运行上面创建的迁移是

CreateTable(
            "dbo.Item1",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                })
            .PrimaryKey(t => t.Id);

        CreateTable(
            "dbo.Item2",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Item1Id = c.Int(nullable: false),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.Item1", t => t.Item1Id, cascadeDelete: true)
            .Index(t => t.Item1Id);

再一次,这可能是我的误解,但是当您删除.ForeignKey("dbo.Item1", t => t.Item1Id, cascadeDelete: true)删除Item2时,Item1是否意味着什么?或者我错了,这是否意味着,删除Item1后删除Item2

1 个答案:

答案 0 :(得分:0)

你可以使用像这样的流畅api来完成这个

 modelBuilder.Entity<Item2>()
                .HasOptional<Item1>(s => s.Item1 ) 
                .WithMany(s => s.Item2List).WillCascadeOnDelete(false);

但是您需要编辑外键以允许像这样的

public int? Item1Id{get;set;}