使用 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
.
我是 .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
.