实体框架 – 等同于.HasOptional在实体框架核心1(EF7)

前端之家收集整理的这篇文章主要介绍了实体框架 – 等同于.HasOptional在实体框架核心1(EF7)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑两个类.
public class File
{
    [Key]
    public string Id { get; set; }

    public string Message_Id { get; set; }

    internal Message Message { get; set; }
}

public class Message 
{
    [Key]
    public string Id { get; set; }       
}

在EF6中,对于N:1..0关系,有这种流畅的API.

modelBuilder.Entity<File>()
            .HasOptional(e => e.Message ).WithMany().HasForeignKey(e => e.Message_Id);

在Entiity Framework Core 1中有什么相当的?

谢谢

解决方法

在EF 7中找不到等效的方法.根据惯例,CLR类型可以包含null的属性将被配置为可选.那么,如果FK属性分别为 nullable或者否,则决定关系是否可选.

总之,由于您的Message_Id FK属性是字符串,它已经接受空值,因此如果使用以下Fluent Api配置:

modelBuilder.Entity<File>()
            .HasOne(s => s.Message)
            .WithMany()
            .HasForeignKey(e => e.Message_Id)

EF将配置您的关系为可选.

如果你的FK属性是像int这样的值类型,你应该声明它为nullable(int?).

另外我注意到现在你有一个导航属性与内部访问修饰符.您应该始终将您的实体属性声明为public.

猜你在找的asp.Net相关文章