gpt4 book ai didi

c# - 使用 Id 与对象的 EF 外键引用

转载 作者:行者123 更新时间:2023-12-03 16:39:36 25 4
gpt4 key购买 nike

使用 Id 与对象的外键引用有什么区别。

例如:
使用 Id 的 FK 关系

class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }

public int CategoryId { get; set; }
}

对比
使用对象的 FK 关系
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }

public Category Category { get; set; }
}

我从数据库中注意到,通过使用 Id 属性,列基本上变成了非空字段。

这是唯一的区别吗?
我认为我们不能一次查询多个表,即查询相关数据?

我什么时候应该选择使用任一选项?

最佳答案

在您的第一个示例中,您没有添加关系,只是添加了一个名为 CategoryId 的整数属性。
在您的第二个示例中,Entity Framework 将创建一个名为“Category_ID”的整数列,但您将无法在模型中看到此属性,因此我喜欢自己显式添加它并能够将它与导航属性。

class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }


[ForeignKey("Category")]
public int CategoryId { get; set; }
public Category Category{get;set;}
}
通过这种方式,您还可以控制 CategoryId 的数据类型,因此您可以将其设为可选(可为空)
public int? CategoryId { get; set; }
*不需要外键数据注释,除非您的属性或导航属性名称不遵循外键属性名称(Bardr)的命名约定,为了清晰起见,明确声明它也无害
这意味着您正在创建与产品和类别的 1 对多关系 (1-*),因此在您的 Category 类中,您将为产品添加集合导航属性
class Category
{
public int Id{ get; set;}
public string Name{ get; set; }
...
public ICollection<Product> Products{get; set;}
}

关于c# - 使用 Id 与对象的 EF 外键引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54787102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com