【问题标题】:Foreign Key creation in EF Core code first首先在 EF Core 代码中创建外键
【发布时间】:2017-11-10 22:58:33
【问题描述】:

我有 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; }
}

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

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

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

【问题讨论】:

  • 您的导航定位到类型组织,而您的类被命名为 GaOrganizations。此外,问题是关于多个级联路径或循环,但在您共享的代码中,两个类之间没有多重关系。请分享一个代码清单,它可以代表您看到的问题

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


【解决方案1】:

EF 不了解这两个实体之间的关系,因此您可能需要在“OnModelCreating”方法中使用 fluent API 进行澄清。

使用类似的东西

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2018-09-18
    • 2012-01-10
    相关资源
    最近更新 更多