1

我有两个实体,用户和反馈,在用户名字段的帮助下,它们之间存在一对多的关系。

Feedback --> User 
--------   --------
username   username

但是,有时反馈可能来自未注册用户,反馈上的用户名字段将为空。在这种情况下,由于外键约束,添加反馈将失败。

如何以声明方式或通过 Fluent API 禁用对关系执行外键约束?创建数据库时默认启用。

谢谢!

4

1 回答 1

6

您不需要出于您的目的禁用外键约束的执行,您只需要允许外键为 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);
于 2012-04-25T22:24:20.050 回答