考虑两个类。
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/