实体框架 – 等同于.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.

dawei

【声明】:唐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。