我首先使用实体框架代码。
我试图将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
答案 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);