【发布时间】:2018-09-21 10:59:37
【问题描述】:
我正在使用 Entity Framework Core 创建我的(代码优先)数据库模型。
在模型中,我有这些类:
[Table("groups")]
public class Group {
public int? Id { get; set; }
[JsonIgnore]
public virtual ICollection<Membership> Members { get; set; }
}
[Table("identities")]
public class Identity {
public int? Id { get; set; }
[JsonIgnore]
public virtual ICollection<Membership> MemberOf { get; set; }
}
[Table("memberships")]
public partial class Membership {
[Column("group_id")]
public int GroupId { get; set; }
[Column("identity_id")]
public int IdentityId { get; set; }
[JsonIgnore]
public virtual Group Group { get; set; }
[JsonIgnore]
public virtual Identity Identity{ get; set; }
}
Membership 是Group 和Identity 之间的多对多关系。
我已经使用 fluent API 配置了这样的关系:
protected override void OnModelCreating(ModelBuilder modelBuilder) {
var entity = modelBuilder.Entity<Membership>();
entity.HasKey(e => new {
e.GroupId,
e.IdentityId }
).HasName("PK_identity_memberships");
entity.HasOne(d => d.Group)
.WithMany(p => p.Members)
.HasForeignKey(d => d.GroupId)
.HasConstraintName("memberships_group_id_fkey");
entity.HasOne(d => d.Identity)
.WithMany(p => p.MemberOf)
.HasForeignKey(d => d.IdentityId)
.HasConstraintName("memberships_identity_id_fkey");
}
我的问题是,如果我尝试在数据库设置 GroupId 和 IdentityId 中插入具有有效值的 Membership,我会收到此错误:
Npgsql.PostgresException: 23503: 在表“memberships”上插入或更新违反了外键约束“memberships_group_id_fkey”
要插入Membership 对象,我需要设置Group 和Identity 导航属性,然后一切正常。
有没有办法在不使用导航属性的情况下插入新对象?
【问题讨论】:
-
当您设置 FK 时,导航属性是
null还是它们包含一些对象?另外,您使用的是哪个 EF Core 版本? -
是的,导航属性是
null。我正在使用 EF 核心 1.1.2。 -
@IvanStoev 感谢您查看此内容 :)
-
@IvanStoev,出于好奇,我发现了问题(请参阅下面的答案)。这是因为我使用
0s 作为 ID :( -
啊哈,我认为这对于 SqlServer 也会爆炸。 0(CLR 默认值)被视为未指定,因此自动生成。见Value generated on add