加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 20:39:19 所属栏目:asp.Net 来源:网络整理
导读:考虑两个类. 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关系,有这种
考虑两个类.
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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读