使用 EF Core 在 ASP.NET Core 6 中创建包含外键的对象

Creating objects in ASP.NET Core 6 with EF Core, when they contain foreign keys

我是 .NET 的初学者,我很难理解如何使用外键创建对象。

假设我有这个 Localitate 实体(含糊地翻译成城市),其中包含 Judet(县)的 FK:

namespace xx.DataLayer.Entities
{
    public class Localitate : BaseEntity
    {
        [Required]
        public string Nume { get; set; }
        [Required]
        public int JudetID { get; set; }
        [Required]
        public virtual Judet Judet { get; set; }

        public Localitate() { }
    }
}

我的请求是这样的:

public class LocalitateRequest
{
    public string Nume { get; set; }
    public int JudetID { get; set; }
}

当我创建一个Localitate对象时,我应该怎么做?是不是导航也要填属性,还是int JudetID就够了?

如果足够,我会遇到另一个问题 - 如果我插入一个不存在的 JudetID,我不会得到任何错误(我想我应该这样做,我的数据库会做如果我要执行插入语句)。

When I create a Localitate object, how should I do it? Do I need to fill the navigation property too, or is the int JudetID enough?

如果你愿意,可以填写外国ID,但这很non-intuitive。想一想,你知道你想要 link 你的对象的名称是什么实体,对吧?因此,一种更自然的构建对象的方式如下:

context.Localitati.Add(new()
{
    Nume = "meep",
    Judet = context.Judete.First(w => w.Nume = "moop")
});

为避免重复查找,您可以使用字典来记忆对象。无论哪种方式,您都需要填写 ID 或外国实体的 ID 字段(可以通过选择它来完成)。

if I insert a JudetID that doesn't exist, I don't get any error

当然可以,因为那不是外键。要么使用 [ForeignKey] 属性声明它,要么使用正确的命名约定:JudetId.