首先在EF Core代码中创建外键

时间:2017-11-10 14:39:27

标签: c# entity-framework entity-framework-core

我有2个型号:

public class GaOrgOrders
{
    public virtual Guid Id { get; set; }

    [ForeignKey("GaOrganizations")]
    public virtual Guid OrgId { get; set; }

    [ForeignKey("GaApps")]
    public virtual Guid AppId { get; set; }

    [ForeignKey("GaOrgUserOrganizations")]
    public virtual Guid OrgUserId { get; set; }

    [ForeignKey("GaServicesTariffs")]
    public virtual Guid ServiceTariffId { get; set; }

    public virtual bool IsTemporary { get; set; }

    public virtual Apps GaApps { get; set; }

    public virtual Organizations GaOrganizations { get; set; }

    public virtual OrgUserOrganizations GaOrgUserOrganizations { get; set; }

    public virtual GaServicesTariffs GaServicesTariffs { get; set; }
}

public class GaOrganizations
{
    public virtual Guid Id { get; set; }

    public virtual string Name { get; set; }

    public virtual bool IsDeleted { get; set; }
}

当我尝试更新数据库并添加这些表时,出现错误:

  

介绍FOREIGN KEY约束' FK_GaOrgOrders_GaOrganizations_OrgId'在桌子上' GaOrgOrders'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。无法创建约束或索引。查看以前的错误。

如果我删除" ForeignKey"来自OrgId属性的属性 - 错误消失,但它在数据库中创建第二个字段(GaOrganizationsId)并使其成为FK。其他键工作正常。 OrgId有什么问题?

1 个答案:

答案 0 :(得分:0)

EF并不了解这两个实体之间的关系,所以您可能需要在您的" OnModelCreating"中使用流畅的API来澄清。方法

使用类似

的内容
modelBuilder.Entity<ClassB>().HasRequired(x => x.ClassA).WithOptional(x => x.ClassB);

其中ClassA和ClassB是我的实体,它们之间的关系为1到0或1。