2

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

我试图将 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.

如何使用实体框架代码优先实现这一目标?

请有人帮助我

提前谢谢

泽卡里奥卡

4

2 回答 2

1

编辑:

我没有对此进行测试,但如果您使用的是 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

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

希望能帮助到你

于 2013-01-30T22:27:50.437 回答
0

您可以通过 fluent API 执行此操作,例如:

modelBuilder.Entity<MyEntity>().HasRequired(t => t.Livro);
modelBuilder.Entity<MyEntity>().HasRequired(t => t.Autor);
于 2013-01-30T23:21:33.427 回答