0

尝试通过 EF Code-First 将另一个 FK 添加到现有表中。

流畅的 API:

  modelBuilder.Entity<Relationship>()
       .HasRequired(c => c.Area)
       .WithMany(d => d.Relationships)
       .HasForeignKey(u => u.AreaId);

关系类包含以下内容:

    [Required]
    public virtual Area Area { get; set; }
    public int AreaId { get; set; }

区域类包含以下内容:

    public virtual ICollection<Relationship> Relationships { get; set; }

PM 控制台的输出:

  ALTER TABLE [dbo].[Relationship] ADD [AreaId] [int] NOT NULL DEFAULT 0
  ALTER TABLE [dbo].[Relationship] ADD CONSTRAINT [FK_dbo.Relationship_dbo.Area_AreaId] FOREIGN KEY ([AreaId]) REFERENCES [dbo].[Area] ([AreaId])

首先,什么是Area_AreaId

其次,我怎么知道是在Relationship实体、Area实体还是Both上设置Fluent API?

我得到的错误:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_dbo.Relationship_dbo.Area_AreaId”冲突。冲突发生在数据库“db”、表“dbo.Area”、列“AreaId”中。

这是怎么回事?

4

1 回答 1

1

您有一个Relationship.AreaId不存在的值,Area.AreaId因此无法应用 FK 约束。

在前面的语句中,您将AreaId列添加到Relationship表中并设置了默认值0. 任何现有的行都将AreaId设置为0. 然后您尝试添加外键约束,但我敢打赌您无法Area.AreaId满足0它。

也许,如果区域对于关系是可选的,您可以在类中使其为空?

public int? AreaId { get; set; }

我猜这会导致 EF 生成一个可为空的列,因此没有默认值 0。

于 2013-11-06T00:06:49.947 回答