我有两个实体,用户和反馈,在用户名字段的帮助下,它们之间存在一对多的关系。
Feedback --> User
-------- --------
username username
但是,有时反馈可能来自未注册用户,反馈上的用户名字段将为空。在这种情况下,由于外键约束,添加反馈将失败。
如何以声明方式或通过 Fluent API 禁用对关系执行外键约束?创建数据库时默认启用。
谢谢!
我有两个实体,用户和反馈,在用户名字段的帮助下,它们之间存在一对多的关系。
Feedback --> User
-------- --------
username username
但是,有时反馈可能来自未注册用户,反馈上的用户名字段将为空。在这种情况下,由于外键约束,添加反馈将失败。
如何以声明方式或通过 Fluent API 禁用对关系执行外键约束?创建数据库时默认启用。
谢谢!
您不需要出于您的目的禁用外键约束的执行,您只需要允许外键为 NULL 值,这称为可选的一对多关系(与不需要的关系相反) t 允许外键的 NULL 值)。
您可以通过以下方式定义此可选关系:
public class Feedback
{
public int Id { get; set; }
[ForeignKey("User")]
public int? UserId { get; set; }
public User User { get; set; }
}
具有可空类型int?
的外键使关系可选。如果User
有一个名为主键的属性Id
,您甚至可以省略该[ForeignKey]
属性,因为 Entity Framework 将根据命名约定将其检测UserId
为导航属性的外键。User
或者,您可以使用 Fluent API 代替数据注释:
modelBuilder.Entity<Feedback>()
.HasOptional(f => f.User)
.WithMany() // or WithMany(u => u.Feedbacks)
.HasForeignKey(f => f.UserId);