繁体   English   中英

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

[英]EF code first, one to (zero or many)?

我可能认为这完全错了,可以解释为什么我在谷歌上找不到答案但是,你能先在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 ,并且在添加到数据库时不需要任何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

你可以使用流畅的api这样做

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

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

public int? Item1Id{get;set;}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM