EF 代码优先,在同一表中具有 2 个非空外键
本文关键字:代码 EF | 更新日期: 2023-09-27 17:56:40
我首先使用实体框架代码。
我试图将 2 个外键放在同一个桌子上,但我不被允许这样做。
就像这样(编辑):
该表称为 Avaliacao
:
[Required]
public int AvaliacaoId { get; set; }
[Required]
public int LivroId { get; set; }
public int? AutorId { get; set; }
public virtual Livro Livro { get; set; }
public virtual Autor Autor { get; set; }
我希望AutorId
不为空,但它只能以这种方式工作。
我希望我可以有 2 个不可空的 FK,但只有一个Delete on Cascade
.
如何使用实体框架代码优先实现此目的?
有人请帮我
提前感谢
泽卡里奥卡
编辑:
我还没有对此进行测试,但是如果您使用的是EF5,则可以通过在DbContext中覆盖OnModelCreate方法来使用它。可以多次调用同一实体以添加配置,以便可以指定第二个外键,设置其 HasRequired 属性并将其 WillCasdeOnDelete 属性设置为 true。
第一个外键是这样的。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Avaliacao>()
.HasRequired(a => a.LivroId)
.HasForeignKey(m => a.LivroId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Avaliacao>()
.HasRequired(a => a.AutorId)
.HasForeignKey(m => a.AutorId)
.WillCascadeOnDelete(false);
}
有关该方法的更多参考,可以在此处查看 MSDN 文档:DbModelBuilder
如前所述,我自己还没有对此进行测试,因此您可能需要更改某些属性。
希望对你有帮助
您可以通过流畅的 API 执行此操作,例如:
modelBuilder.Entity<MyEntity>().HasRequired(t => t.Livro);
modelBuilder.Entity<MyEntity>().HasRequired(t => t.Autor);