gpt4 book ai didi

c# - EF代码优先,同一张表中有2个非空外键

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:01 24 4
gpt4 key购买 nike

我首先使用实体​​框架代码。

我试图将 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 不为 null 但它只能那样工作。

我希望我可以有 2 个不可空 FK 但只有一个 Delete on Cascade

如何使用 Entity Framework 代码优先实现这一点?

有人帮帮我

提前谢谢

ZeCarioca

最佳答案

编辑:

我没有对此进行测试,但如果您使用的是 EF5,则可以通过在 DbContext 中覆盖它来使用 OnModelCreating 方法。您可以多次调用同一实体来添加配置,这样您就可以指定第二个外键,设置其 HasRequired 属性并将其 WillCascadeOnDelete 属性设置为 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

如前所述,我自己还没有对此进行测试,因此您可能需要更改一些属性。

希望对你有帮助

关于c# - EF代码优先,同一张表中有2个非空外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com