尝试通过EF Code-First将另一个FK添加到现有表中。
Fluent 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
是什么?
其次,如何知道是在关系实体,区域实体还是两者上设置Fluent API?
我得到的错误:
ALTER TABLE语句与FOREIGN KEY约束冲突 “FK_dbo.Relationship_dbo.Area_AreaId”。冲突发生在 数据库“db”,表“dbo.Area”,列“AreaId”。
发生了什么事?
答案 0 :(得分:1)
Relationship.AreaId
中有一个Area.AreaId
中没有AreaId
中不存在的值,因此无法应用FK约束。
在上一个语句中,您将Relationship
列添加到0
表并设置了默认值AreaId
。任何现有行都会将0
设置为Area.AreaId
。然后你试图添加外键约束,但我敢打赌你没有0
public int? AreaId { get; set; }
来满足它。
也许,如果区域是关系的可选区域,你可以在类中使它可以为空吗?
{{1}}
我想这会导致EF产生一个可以为空的列,因此默认值为0。