entity-framework - 相当于 Entity Framework Core 1 (EF7) 中的 .HasOptional

标签 entity-framework asp.net-core entity-framework-core .net-core asp.net-core-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);

Entity Framework Core 1 中的等效项是什么?

谢谢

最佳答案

您在 EF 7 中找不到等效方法。按照惯例,CLR 类型可以包含 null 的属性将被配置为可选。因此,决定该关系是否可选的是 FK 属性是否为 nullable或不分别。

综上所述,由于您的 Message_Id FK 属性是 string,它已经接受 null 值,因此如果您使用以下 Fluent Api配置:

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

EF 会将您的关系配置为可选(或根据要求 N : 0..1)。

如果您的 FK 属性是像 int 这样的值类型,您应该将其声明为可空 (int?)。

我还注意到现在您有一个带有 internal 访问修饰符的导航属性。您应该始终将实体属性声明为 public

关于entity-framework - 相当于 Entity Framework Core 1 (EF7) 中的 .HasOptional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562483/

相关文章:

visual-studio - Nuget 无法更新 .NET Core 项目

c# - 想要得到 405 (Method Not Allowed) 而不是 404

c# - ASP.NET Core EF Code First appsettings.json

c# - 测试时的努力问题

c# - Entity Framework 5 DbUpdateException : Null value for non-nullable member

c# - 如何在 C# 中根据 ID 向嵌套列表中填充数据?

c# - 向数据库插入数据失败

sql - 限制对单个数据库中不同模式的访问的最佳方法

Azure 的 ASP.NET 5 SecretManager 生产值(value)

asp.net-core - 如何在 Entity Framework Core 中创建与同一实体的两个一对一关系