EF代码优先在同一个表中有2个非空外键

时间:2013-01-30 22:18:09

标签: c# entity-framework ef-code-first

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

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

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

请有人帮助我

事先提前

ZeCarioca

2 个答案:

答案 0 :(得分: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

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

希望有所帮助

答案 1 :(得分:0)

您可以通过流畅的API执行此操作,例如:

modelBuilder.Entity<MyEntity>().HasRequired(t => t.Livro);
modelBuilder.Entity<MyEntity>().HasRequired(t => t.Autor);
相关问题