如何防止Code First对关系启用外键约束?

Ale*_*tin 1 entity-framework code-first ef-code-first

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

Feedback --> User 
--------   --------
username   username
Run Code Online (Sandbox Code Playgroud)

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

如何以声明方式或通过Fluent API禁用对关系的外键约束的实施?创建数据库时,默认情况下启用它。

谢谢!

Sla*_*uma 5

你不需要禁用你的目的外键约束的执行,你只需要允许空值,这就是所谓的外键可选择一个一对多的关系(相对于一个需要的关系,它没有按” t允许外键为NULL值)。

您可以通过以下方式定义此可选关系:

public class Feedback
{
    public int Id { get; set; }

    [ForeignKey("User")]
    public int? UserId { get; set; } 
    public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)