gpt4 book ai didi

c# - Entity Framework 导航属性生成规则

转载 作者:可可西里 更新时间:2023-11-01 08:23:28 26 4
gpt4 key购买 nike

我想知道 Entity Framework 在导航属性的命名/生成方面遵循哪些规则。我已经观察到几个似乎没有意义的场景,所以我想知道是否有人确切地知道这些是如何工作的。

场景 1:

public class Post
{
public int Id { get; set; }
public User Author { get; set; }
}

生成

Scenario 1

即。默认情况下,导航属性生成名为 [PropertyName]_Id 的 FK

场景 2:

有意义的是,如果 EF 在您手动指定 FK Id 时生成格式为 [PropertyName]_Id 的属性,但是它将遵循相同的规则:

public class Post
{
public int Id { get; set; }
public int? Author_Id { get; set; }
public User Author { get; set; }
}

生成

Scenario 2

如您所见,这不会自动注册为导航属性。

场景 3:

如果它不适用于场景 2,为什么它适用于备用命名约定?

public class Post
{
public int Id { get; set; }
public int? AuthorId { get; set; }
public User Author { get; set; }
}

生成

Scenario 3

导航属性检测和生成的规则是什么?

最佳答案

这是预期的行为,它基于 EF 的两个不同约定

  • 在第一个示例中,您使用的是独立关联,其中您的实体没有 FK 属性。 EF 将使用简单模式在数据库中创建 FK:NameOfNavigationProperty_NameOfRelatedPK 此约定遵循传统数据库命名。
  • 在第二个示例中,您定义了与 EF 使用的 FK 同名的属性。 EF 检测到这一点并向其生成的 FK 添加 1。您的属性未用作 FK 的原因是搜索 FK 属性的第二个约定。此约定预计 FK 属性将具有此名称(约定遵循传统的 .NET 命名):
    • NameOfNavigationPropertyNameOfRelatedPKNavigationPropertyNameForeignKeyDiscoveryConvention 提供
    • NameOfRelatedTypeNameOfItsPKTypeNameForeignKeyDiscoveryConvention 提供
    • NameOfRelatedPKPrimaryKeyNameForeignKeyDiscoveryConvention 提供
  • 在上一个示例中,您正确定义了 FK 属性并且 EF 检测到它,因此它使用外键关联。

关于c# - Entity Framework 导航属性生成规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11079863/

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